如何在android中parsing这个嵌套的JSON数组

我必须parsing下面嵌套的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(); } } 

下面是我认为你的JSONparsing器应该是这样的(可能有一些错误的错误,我没有在编辑器上testing这个代码:)):

 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库。 它将jsonparsing成可以访问的各种对象。 一个虚拟代码在这里:

 ` 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 = new JSONObject(results);

  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); 

但实际上,您可以以stringformsparsingJSON响应。 您不需要在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; } }