Как сгруппировать данные массива json при выходе из того же значения android studio

#android #json

#Android #json

Вопрос:

У меня есть Json, подобный этому, я хочу сгруппировать по sub_name, чтобы получить массив телефонов, мобильных операций (каждый массив имеет одинаковое значение данных, получает только один из массива).

  category: {
    cate: [
    {
    sub_id: "568",
    sub_name: "Phones",
    ns_id: "17002",
    ns_name: "Mobile Phone"
    },
    {
    sub_id: "568",
    sub_name: "Phones",
    ns_id: "18787",
    ns_name: "Other Phones"
    },
    {
    sub_id: "372",
    sub_name: "Mobile Operation",
    ns_id: "3650",
    ns_name: "Sim Card"
    }
}
  

Комментарии:

1. я не понял вашего вопроса. пожалуйста, объясните подробнее

2. вы анализируете свой json?

3. Что вы пробовали до сих пор?

Ответ №1:

В вашем случае попробуйте

 String subName = "Phones";
JSONObject json = new JSONObject(jsonString);
JSONArray jsonArray = json.getJSONArray("cate");
JSONArray groupJsonWithSubName = new JSONArray();

for(int i=0; i < jsonArray.length(); i  ){
    JSONObject jsonData = jsonArray.getJSONObject(i);

    if(jsonData.getString("sub_name").equals(subName){
         groupJsonWithSubName.put(jsonData);
    }
}
// in here groupJsonWithSubName will contains all json object which have sub_name="Phones"
  

Ответ №2:

Создайте ArrayList и добавьте свои данные.Перед добавлением 2-го элемента каждый раз проверяйте, имеет ли ваш ArrayList одинаковые данные или не использует цикл for с помощью размера ArrayList.

Что бы я ни понял в вашем запросе, я сделал этот код….

 import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

ArrayList phones = new ArrayList<>();
ArrayList Mobile_Operation = new ArrayList<>();
String data = "  category: {n"  
        "    cate: [n"  
        "    {n"  
        "    sub_id: "568",n"  
        "    sub_name: "Phones",n"  
        "    ns_id: "17002",n"  
        "    ns_name: "Mobile Phone"n"  
        "    },n"  
        "    {n"  
        "    sub_id: "568",n"  
        "    sub_name: "Phones",n"  
        "    ns_id: "18787",n"  
        "    ns_name: "Other Phones"n"  
        "    },n"  
        "    {n"  
        "    sub_id: "372",n"  
        "    sub_name: "Mobile Operation",n"  
        "    ns_id: "3650",n"  
        "    ns_name: "Sim Card"n"  
        "    }n"  
        "    ]n"  
        "    }";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        JSONObject jsonObject = new JSONObject(data);
        JSONObject categoryObject = jsonObject.getJSONObject("category");
        JSONArray jsonArray = categoryObject.getJSONArray("cate");
        for (int i = 0; i < jsonArray.length(); i  ) {
            String datal = ((JSONObject) jsonArray.get(i)).getString("sub_name");
            if (datal.equalsIgnoreCase("Phones"))
                phones.add(jsonArray.get(i));
            else if (datal.equalsIgnoreCase("Mobile Operation"))
                Mobile_Operation.add(jsonArray.get(i));
        }
        Toast.makeText(this,((JSONObject)phones.get(1)).getString("ns_name"),Toast.LENGTH_SHORT).show();

    } catch (JSONException e) {
        e.printStackTrace();
    }
}
}