2013-07-16 3 views
6

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

{ 
      "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(); 
     } 
    } 
+0

@Enrichman ок я покажу вам. –

+2

Btw, этот json недействителен. Последний элемент во внутреннем объекте заканчивается запятой: '' sku ":" 5555 ",' – Enrichman

+0

@Enrichman Я добавил проверенный код. Также я удалил эту запятую –

ответ

19

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

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"); 
         } 
        } 
       } 
      } 
     } 
    } 
} 
+0

Я отредактировал JSON –

+0

Вы протестировали код, если он работает? – hardartcore

+0

Я проверю его.Спасибо –

1

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

org.json.simple.JSONValue 

код:

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

Я отредактировал JSON. –

1

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

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

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

//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"); 
} 
0

JSONObject читатель = новый 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); 
0

Просто вы можете автоматически разобрать его с 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; 
    } 

} 
Смежные вопросы