Как разобрать этот вложенный массив JSON в android

Мне нужно проанализировать данные вложенного массива Json в моем приложении. Я смущен, как получить из этого ценности.

{ "prodCat_list": [ { "prods": [ { "cat_id": "9", "position": "1", "sku": "wwww345" }, { "cat_id": "9", "position": "2", "sku": "coof23" }, { "cat_id": "9", "position": "3", "sku": "dde45" }, { "cat_id": "9", "position": "4", "sku": "5555" } ] }, { "prods": [ { "cat_id": "9", "position": "1", "sku": "wwww345" }, { "cat_id": "9", "position": "2", "sku": "coof23" }, { "cat_id": "9", "position": "3", "sku": "dde45" }, { "cat_id": "9", "position": "4", "sku": "5555" } ] }, ] } 

Может ли кто-нибудь объяснить мне, как получить от этого внутренние ценности.

Я пробовал это

 JSONParser parser = new JSONParser(); JSONObject items = parser.getJSONFromUrl(productInfoUrl); try { JSONArray itemsDetails = items.getJSONArray("prodCat_list"); if(itemsDetails.length()>0){ for (int i = 0; i < itemsDetails.length(); i++) { JSONArray productWithCategories = itemsDetails.getJSONArray(i); JSONObject object = productWithCategories.getJSONObject(i); Product productInfo = new Product( object.getString("sku"), object.getInt("cat_id"), object.getInt("position")); ProductDbHandler productDbHandler = new ProductDbHandler(context); productDbHandler.addProducts(productInfo); } } else System.out.println("No product to add"); } catch (JSONException e) { e.printStackTrace(); } } 

Вот как я думаю, что ваш JSON Parser должен выглядеть (могут быть некоторые опечатки, я не тестировал этот код в редакторе:)):

 JSONObject mainObj = new JSONOBject(myString); if(mainObj != null){ JSONArray list = mainObj.getJSONArray("prodCat_list"); if(list != null){ for(int i = 0; i < list.length();i++){ JSONObject elem = list.getJSONObject(i); if(elem != null){ JSONArray prods = elem.getJSONArray("prods"); if(prods != null){ for(int j = 0; j < prods.length();j++){ JSONObject innerElem = prods.getJSONObject(j); if(innerElem != null){ int cat_id = innerELem.getInt("cat_id"); int pos = innerElem.getInt("position"); String sku = innerElem.getString("sku"); } } } } } } } 

Вы можете использовать библиотеку GSon. Он анализирует json на различные объекты, к которым вы можете получить доступ. Код фиктивного кода находится здесь:

 ` GSon gSon = new GSon(); ProdCatList prodCatList = gSon.fromJson(---inputStreamReader of your JSon data---,ProdCatList.class);` 

Попробуй это!

 //Write your own implementation of json parser JSONParser jParser = new JSONParser(); JSONArray prod_cat = new JSONArray(); JSONArray products = new JSONArray(); JSONObject json = jParser.getJSONFromUrl("your source"); prod_cat = json.getJSONArray("prodCat_list"); for (int i = 0; i < prod_cat.length(); i++) { JSONObject object = prod_cat.getJSONObject(i); products = object.getJSONArray("products"); } 

попробуй использовать

 org.json.simple.JSONValue 

код:

 import org.json.simple.JSONValue; String content = "{...}"; JSONValue.parse(content); 

JSONObject reader = новый JSONObject (результаты);

  JSONArray VendorProductsList = reader.getJSONArray("VendorProductsList"); for (int i = 0; i < VendorProductsList.length(); i++) { ebay=new Ebay(); JSONObject elem = VendorProductsList.getJSONObject(i); JSONArray Products = elem.getJSONArray("Products"); for (int j = 0; j < Products.length(); j++) { JSONObject innerElem = Products.getJSONObject(j); //JSONObject ProductName=Products.getJSONObject(j); ebay.setProductName(innerElem.getString("ProductName")); gallery_array.add(ebay); 

Просто вы можете автоматически разобрать его с помощью Gson:

 JSONParser parser = new JSONParser(); JSONObject items = parser.getJSONFromUrl(productInfoUrl); Gson gson = new GsonBuilder().create(); ProdCatResponse prodCatResponse = gson.fromJson(items.toString(), ProdCatResponse.class); 

Но на самом деле вы можете разобрать ответ JSON в строковой форме. Вам не нужно получать ответ в JSONObject и использовать toString() .

 JSONParser parser = new JSONParser(); String items = parser.getFromUrl(productInfoUrl); Gson gson = new GsonBuilder().create(); ProdCatResponse prodCatResponse = gson.fromJson(items, ProdCatResponse.class); 

Дополнительная информация о Gson: https://guides.codepath.com/android/Leveraging-the-Gson-Library


Это образец образца модели, вы можете сгенерировать его с помощью http://www.jsonschema2pojo.org .

ProdCatResponse.java

 public class ProdCatResponse { private List <Prod> prods = new ArrayList <Prod> (); public List <Prod> getProds() { return prods; } public void setProds(List < Prod > prods) { this.prods = prods; } } 

Prod.java

 public class Prod { private String catId; private String position; private String sku; public String getCatId() { return catId; } public void setCatId(String catId) { this.catId = catId; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public String getSku() { return sku; } public void setSku(String sku) { this.sku = sku; } }