2016-05-20 114 views
3

你好我试图通过一个JSON字符串,看起来像这样来遍历JSON数组使用JSON从URL响应后追加JSON字符串中的Android迭代:使用凌空

{ 
    "vendor":[ 
      { 
       "vendor_name":"Tapan Moharana", 
       "vendor_description":"", 
       "vendor_slug":"tapan", 
       "vendor_logo":null, 
       "contact_number":null 
      } 
      ], 
      "products": 
       { 
       "25": 
        { 
        "name":"Massage", 
        "price":"5000.0000", 
        "image":"http:\/\/carrottech.com\/lcart\/media\/catalog\/product\/cache\/1\/image\/150x\/9df78eab33525d08d6e5fb8d27136e95\/2\/9\/29660571-beauty-spa-woman-portrait-beautiful-girl-touching-her-face.jpg" 
        }, 
       "26": 
        { 
        "name":"Chicken Chilly", 
        "price":"234.0000", 
        "image":"http:\/\/carrottech.com\/lcart\/media\/catalog\/product\/cache\/1\/image\/150x\/9df78eab33525d08d6e5fb8d27136e95\/c\/h\/cheicken.jpg" 
        }, 
       "27": 
       { 
        "name":"Chicken Biryani", 
        "price":"500.0000", 
        "image":"http:\/\/carrottech.com\/lcart\/media\/catalog\/product\/cache\/1\/image\/150x\/9df78eab33525d08d6e5fb8d27136e95\/placeholder\/default\/image_1.jpg" 
        } 
       } 
    } 

这里的一个更好的视野JSON字符串:

enter image description here

我使用这个代码通过该JSON字符串的供应商阵列迭代:

JSONObject jsono = new JSONObject(response); 
JSONArray children = jsono.getJSONArray("vendor"); 
for (int i = 0; i <children.length(); i++) { 
    JSONObject jsonData = children.getJSONObject(i); 
    System.out.print(jsonData.getString("vendor_name") + "<----"); 
    // String vendorThumbNailURL=jsonData.getString("") 
    //jvendorImageURL.setImageUrl(local, mImageLoader); 
    vendorLogo=vendorLogo+jsonData.getString("vendor_logo").trim(); 
    jvendorImageURL.setImageUrl(vendorLogo, mImageLoader); 
    jvendorName.setText(jsonData.getString("vendor_name")); 
    jvendorAbout.setText(jsonData.getString("vendor_description")); 
    jvendorContact.setText(jsonData.getString("contact_number")); 
} 

,但我不知道如何从“产品”对象,请帮助我如何设置我的JSON对象通过“产品”

迭代当我尝试改变数组的形式获取数据,这样既产品和供应商都是一个单独的JSON数组我仍然得到上面的JSON格式..

这是我在做什么

$resp_array['vendor'] = $info; 
$resp_array['products'] = $vendorProductsInfo; 
$resp_array = json_encode($resp_array); 
    print_r($resp_array); 

请帮我这个

改进的问题:

我已经修改了这样我的网络响应:

[{"entity_id":24,"product_name":"Burger","product_image_url":"\/b\/u\/burger_large.jpg","price":"234.0000","category_id":59},{"entity_id":27,"product_name":"Chicken Biryani","product_image_url":"\/b\/i\/biryani.jpg","price":"500.0000","category_id":59},{"entity_id":31,"product_name":"Pizza","product_image_url":"\/p\/i\/pizza_png7143_1.png","price":"125.0000","category_id":59}] 

,代码:

JSONArray children = jsono.getJSONArray("vendor"); 
         for (int i = 0; i <children.length(); i++) { 
          JSONObject jsonData = children.getJSONObject(i); 
          System.out.print(jsonData.getString("vendor_name") + "<----"); 
          // String vendorThumbNailURL=jsonData.getString("") 
          //jvendorImageURL.setImageUrl(local, mImageLoader); 
          vendorLogo=vendorLogo+jsonData.getString("vendor_logo").trim(); 
          jvendorImageURL.setImageUrl(vendorLogo, mImageLoader); 
          jvendorName.setText(jsonData.getString("vendor_name")); 
          jvendorAbout.setText(jsonData.getString("vendor_description")); 
          jvendorContact.setText(jsonData.getString("contact_number")); 
          System.out.print(jsonData.getString("products") + "<----"); 
         } 
         JSONObject jsono1 = new JSONObject(response); 
         JSONArray childrenProducts = jsono1.getJSONArray("products"); 
         for(int i=0;i<childrenProducts.length();i++){ 
          JSONObject jsonData = childrenProducts.getJSONObject(i); 
          System.out.print(jsonData.getString("name") + "<----dd"); 
         } 

,但仍是部分产品无法正常工作......请帮助

+0

嗨。如果您认为我提供的解决方案是正确的,请将其标记为完整。谢谢。 –

回答

0

可以试试这个

JSONObject jsono = null; 
    try { 
     jsono = new JSONObject(response); 
     JSONObject productObject = jsono.getJSONObject("products"); 
     Iterator<String> keys = productObject.keys(); 

     while (keys.hasNext()) 
     { 
      // get the key 
      String key = keys.next(); 

      // get the value 
      JSONObject value = productObject.getJSONObject(key); 

      //get seprate objects 
      String name = value.getString("name"); 
      String image = value.getString("image"); 
      Log.i(TAG,name+"-"+image); 

     } 
     } 
     catch (JSONException e) { 
     e.printStackTrace(); 
    } 
+0

我正在测试它..PLZ给我一分钟 –

+0

它没有工作..它正在考虑productObject作为一个整体字符串不是它的每个部分作为对象.. JSONObject productChildren = jsono.getJSONObject(“products”);对于(int i = 0; i

+0

@ShahidSarwar请显示我的更新回答 –

-1

试试这个:

JSONObject productObject = jsono.getJSONObject("products"); 

JSONObject json_25 = productObject getJSONObject("25"); 
String name_25= json_25.getString("name"); 
String price_25= json_25.getString("price"); 
String image_25= json_25.getString("image"); 

JSONObject json_26 = productObject getJSONObject("26"); 
String name_26= json_26.getString("name"); 
String price_26= json_26.getString("price"); 
String image_26= json_26.getString("image"); 

JSONObject json_27 = productObject getJSONObject("27"); 
String name_27= json_27.getString("name"); 
String price_27= json_27.getString("price"); 
String image_27= json_27.getString("image"); 
+0

Bro这是一个静态实现,我需要使用while循环或for循环,因为从url获取的数据不会总是具有相同的大小。 –

+0

但你得到的回应格式错误。而不是25,26,27应该有json数组 – Shubham

+0

是的,我试图把它放在我的webservice数组中 –

1

为了让您的产品数据,您需要使用Iterator

JSONObject jProducts = jsonObject 
      .optJSONObject("products"); 
    try { 
     if (jProducts 
       .length() > 0) { 
      Iterator<String> p_keys = jProducts 
        .keys(); 
      while (p_keys 
        .hasNext()) { 
       String keyProduct = p_keys 
         .next(); 
       JSONObject jP = jProducts 
         .optJSONObject(keyProduct); 

       if (jP != null) { 
        Log.e("Products", 
          jP.toString()); 
       } 
      } 
     } 
    } catch (Exception e) { // TODO: 
     // handle 
     // exception 
    } 
2

这里是工作的解决方案:使用Google GSON(开放源代码的jar)

import java.io.IOException; 

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 



    public class JsonToJava { 

      public static void main(String[] args) throws IOException { 
       try{ 
        String json = "<YOUR_JSON>"; 
        Gson gson = new GsonBuilder().create(); 
        VendorInfo vInfo = gson.fromJson(json, VendorInfo.class);  
        System.out.println(vInfo.getVendorName());    
       } catch(Exception ex) { 
        ex.printStackTrace(); 
       } 
      } 
     } 

为供应商和产品创建分类

public class Vendor { 
    public String vendor_name; 
    public String vendor_description; 
    public String vendor_slug; 
    public String vendor_logo; 
    public String contact_number; 

    public String getName() { 
     return vendor_name; 
    } 
} 

public class Product { 
    public String name; 
    public long price; 
    public String image; 

    public String getName() { 
     return name; 
    } 
} 

VENDORINFO是JSON对象的形式:

import java.util.Map; 

public class VendorInfo { 
    public Vendor[] vendor; 
    public Map<Integer, Product> products; 

    public String getVendorName() { 
     return vendor[0].getName(); 
    } 
    public Product getProduct() { 
     System.out.println(products.size()); 
     return products.get(25); 
    } 
} 

您可以添加您为干将供应商,产品和VENDORINFO。你完成了!你会得到所有的数据。

输出JsonToJava的:

Tapan Moharana