2013-02-07 14 views
6

का उपयोग कर पार्स JSON डेटा मेरे पास कुछ JSON (नीचे दिखाया गया है) है, मैं पूरे JSON के माध्यम से पार्स करने की कोशिश कर रहा हूं, और प्रत्येक ऑब्जेक्ट एक वर्ग का एक नया उदाहरण होगा जो नीचे दिए गए चर घोषित करता है। इसे करने का बेहतरीन तरीका क्या है? क्या मुझे JSONReader का उपयोग करना चाहिए या JSONObject और JSONArray का उपयोग करना चाहिए। मैं कुछ ट्यूटोरियल पढ़ रहा हूं और कुछ सामान्य प्रश्न पूछ रहा हूं, लेकिन मैंने इस तरह के डेटा को कैसे पार्स करने के बारे में कोई उदाहरण देखा है।JSONReader या JSONObject/JSONArray

{ 
    "id": 356, 
    "hassubcategories": true, 
    "subcategories": [ 
     { 
      "id": 3808, 
      "CategoryName": "Current Products", 
      "CategoryImage": null, 
      "hassubcategories": true, 
      "subcategories": [ 
       { 
        "id": 4106, 
        "CategoryName": "Architectural", 
        "CategoryImage": "2637", 
        "hassubcategories": true, 
        "subcategories": [ 
         { 
          "id": 391, 
          "CategoryName": "Flooring", 
          "CategoryImage": "2745", 
          "hassubcategories": false 
         } 
        ] 
       } 
      ] 
     }, 
     { 
      "id": 3809, 
      "CategoryName": "Non-Current Products", 
      "CategoryImage": null, 
      "hassubcategories": true, 
      "subcategories": [ 
       { 
        "id": 4107, 
        "CategoryName": "Desk", 
        "CategoryImage": "2638", 
        "hassubcategories": true, 
        "subcategories": [ 
         { 
          "id": 392, 
          "CategoryName": "Wood", 
          "CategoryImage": "2746", 
          "hassubcategories": false 
         } 
        ] 
       } 
      ] 
     } 
    ] 
} 

उत्तर

2

अगर मैं यह करने के लिए थे, मैं पूरी स्ट्रिंग एक JSONObject

JSONObject obj = new JSONObject(str); 
को पार्स जाएगा

तब मैं देखता हूं कि आपके उपश्रेणियां एक JSONArray है। तो मैं इसे इस

JSONArray arr = new JSONArray(obj.get("subcategories")); 

तरह परिवर्तित कर देंगे इस के साथ आप एक पाश

for(int i = 0; i < arr.length; i++) 
JSONObject temp = arr.getJSONObject(i); 
Category c = new Category(); 
c.setId(temp.get("id")); 
4

जीएसओएन सबसे आसान तरीका है जब आपको नेस्टेड ऑब्जेक्ट्स के साथ काम करना होता है।

इस तरह:

//after the fetched Json: 
Gson gson = new Gson(); 

Event[] events = gson.fromJson(yourJson, Event[].class); 

//somewhere nested in the class: 
static class Event{ 
    int id; 
    String categoryName; 
    String categoryImage; 
    boolean hassubcategories; 
    ArrayList<Event> subcategories; 
} 

आप इस ट्यूटोरियल की जाँच कर सकते, http://androidsmith.com/2011/07/using-gson-to-parse-json-on-android/ या http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html या http://www.androidhive.info/2012/01/android-json-parsing-tutorial/

0

उदाहरण JSON डेटा आप पोस्ट JSON के डेटा संरचना का पालन करने के लिए प्रतीत नहीं होता है और अपने वर्ग वस्तु का दृष्टांत कर सकते हैं। मुस्तफा द्वारा पोस्ट किए गए तीसरे link में सिखाए जाने के साथ ही आपको उसी डेटा को उसी तरह से बनाना होगा। यह वास्तव में एक महान ट्यूटोरियल है। मैंने कदमों का पालन किया और यह वास्तव में काम करता है!

8

आप जेएसओएन ऑब्जेक्ट/जेएसओएन ऐरे का उपयोग केवल तभी कर सकते हैं जब आपके जेसन डेटा का आकार 1 एमबी से कम हो। अन्यथा आपको JSONReader के साथ जाना चाहिए। JSONReader वास्तव में स्ट्रीमिंग दृष्टिकोण का उपयोग करता है जबकि JSONObject और JSONArray अंत में रैम पर सभी डेटा लोड करता है जो बड़े जेसन के मामले में OutOfMemoryException का कारण बनता है।

+5

'आप JSON वस्तु/JSON केवल यदि सरणी का उपयोग कर सकते आपके जेसन डेटा का आकार 1 एमबी से कम है जहां यह जानकारी आधिकारिक रूप से दस्तावेज़ीकृत है? – AADProgramming

1

इस JsonReader के माध्यम से वस्तुओं की मॉडलिंग ArrayList के लिए Gson का उपयोग करने का एक सरल उदाहरण है:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tv = (TextView) findViewById(R.id.textviewtest); 
    Task task = new Task(); 
    task.execute(); 
} 

private class Task extends AsyncTask<Void, Void, ArrayList<Flower>> { 

    @Override 
    protected ArrayList<Flower> doInBackground(Void... params) { 

     ArrayList<Flower> arrayFlowers = new ArrayList<Flower>(); 
     Flower[] f = null; 
     try { 
      String uri = "http://services.hanselandpetal.com/feeds/flowers.json"; 
      URL url = new URL(uri); 
      HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
      Gson gson = new Gson(); 

      JsonReader reader = new JsonReader(new InputStreamReader(con.getInputStream())); 
      f = gson.fromJson(reader, Flower[].class); 

      for (Flower flower : f) { 
       arrayFlowers.add(flower); 
      } 
     } catch (MalformedURLException e) { 
      return null; 
     } catch (IOException e) { 
      return null; 
     } 
     return arrayFlowers; 
    } 
    @Override 
    protected void onPostExecute(ArrayList<Flower> result) { 
     StringBuilder sb = new StringBuilder(); 
     for (Flower flower : result) { 
      sb.append(flower.toString()); 
     } 
     tv.setText(sb.toString()); 
    } 
} 

और वस्तु मैं मॉडलिंग:

public class Flower { 

private String category; 
private double price; 
private String instructions; 
private String photo; 
private String name; 
private int productId; 

public String getCategory() { 
    return category; 
} 
public void setCategory(String category) { 
    this.category = category; 
} 
public double getPrice() { 
    return price; 
} 
public void setPrice(double price) { 
    this.price = price; 
} 
public String getInstructions() { 
    return instructions; 
} 
public void setInstructions(String instructions) { 
    this.instructions = instructions; 
} 
public String getPhoto() { 
    return photo; 
} 
public void setPhoto(String photo) { 
    this.photo = photo; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public int getProductId() { 
    return productId; 
} 
public void setProductId(int productId) { 
    this.productId = productId; 
} 
@Override 
public String toString() { 
    return getProductId() + " : " + name + "\n" + price + "$" + "\n" + "\n"; 
} 
संबंधित मुद्दे