2013-07-16 15 views
6

Mam do przeanalizowania danych zagnieżdżonych Json w mojej aplikacji. Jestem zdezorientowany, jak uzyskać wartości z tego.Jak przeanalizować tę zagnieżdżoną tablicę JSON w Androidzie

{ 
      "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" 

         } 
      ] 
       }, 
      ] 
     } 

Czy ktokolwiek może mi doradzić, jak uzyskać wartości wewnętrzne z tego.

Próbowałem to

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 ok ja pokaże. –

+2

Btw, json jest nieprawidłowy. Ostatni element w obiekcie wewnętrznym kończy się przecinkiem: '' sku ":" 5555 ",' – Enrichman

+0

@Enrichman Dodałem wypróbowany kod. Usunąłem też ten przecinek –

Odpowiedz

19

Oto, jak myślę, że parser JSON powinien wyglądać (może być kilka błedów, nie przetestować ten kod w edytorze:)):

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

Edytowałem JSON –

+0

Czy testowałeś kod, jeśli działa? – hardartcore

+0

Testuję to.Dzięki –

1

spróbuj użyć kodu

org.json.simple.JSONValue 

:

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

Edytowałem JSON. –

1

Można użyć biblioteki GSon. Parsuje json w różne obiekty, do których masz dostęp. Kod fikcyjny jest tutaj:

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

Wypróbuj!

//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 czytelnika = new JSONObject (wyniki);

  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

Wystarczy można automatycznie analizować je z Gson:

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

Ale rzeczywiście można analizować odpowiedzi JSON w postaci łańcucha. Nie musisz uzyskiwać odpowiedzi w JSONObject i używać toString().

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

Więcej informacji o Gson: https://guides.codepath.com/android/Leveraging-the-Gson-Library


To jest przykładowy model klasy, można wygenerować go z 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; 
    } 

} 
Powiązane problemy