#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();
}
}
}