2016-05-20 6 views
3

を使用して、URLからの応答として、JSON後アンドロイドで追加JSON文字列をJSON配列を反復こんにちは、私はこのようになりますJSON文字列を反復処理しようとしています:ここはボレー

{ 
    "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オブジェクトを設定するのですか私を助けてください取得する方法

を知りません製品やベンダーが

これは私がこの

MODIFIED QUESTIONで私を助けてください

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

をやっているものです..私はまだ上記のJSON形式を取得する別のJSON配列です:

私はこのように私のウェブ応答変更しました:

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

を与える...それは... JSONObject productChildren = jsono.getJSONObject(「製品」)オブジェクトとしての各部分1つの文字列全体としてproductObjectを検討していません。 for(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

これは静的な実装です。私はwhileやforループを使ってiterateする必要があります。なぜなら、URLから取得するデータは常に同じサイズではないからです。 –

+0

しかし、あなたが受け取ったレスポンスは間違った形式です。代わりに、25,26,27のJSON配列があるはず – Shubham

+0

はい私はそれは、あなたは、ベンダーのようなプロジェクトを解析することができ、配列になります場合は、私のウェブサービス –

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(オープンソースジャー)

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(); 
       } 
      } 
     } 
を使用して

ベンダーと製品のクラスを作成する

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のためにあなたのゲッターを追加することができます。

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オブジェクト形式です。あなたは終わった!あなたはすべてのデータを取得します。 JsonToJavaの

出力:

Tapan Moharana 
関連する問題