ParS JSON Daten mit JSONReader oder JSONObject / JSONArray

Ich habe einige JSON (siehe unten), ich versuche, durch die gesamte JSON zu analysieren, und jedes Objekt wird eine neue Instanz einer Klasse sein, die die Variablen unten deklariert. Was ist der beste Weg, dies zu tun? Soll ich einen JSONReader verwenden oder JSONObject und JSONArray verwenden. Ich habe einige Tutorials gelesen und einige allgemeine Fragen gestellt, aber ich habe keine Beispiele dafür gefunden, wie man Daten wie diese analysiert.

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

  • Ändern der Standardfarbe von Android CheckBox Check Mark
  • "Warten auf Debugger zu beenden" zeigt auch wenn nicht im Debug-Modus ausgeführt wird
  • NameValuePair veraltet
  • Erstellen Sie eine ziehbare Drehung um 180 Grad
  • Android SurfaceHolder.unlockCanvasAndPost () verursacht keine Wiederholung
  • 'Java' Plugin ist nicht kompatibel mit den Android Plugins
  • IllegalStateException: Fragment <ThisFragment> befindet sich derzeit nicht im FragmentManager
  • PDF in der Android-App öffnen
  • Android benutzerdefinierte Schriftart Spannable Typeface Span
  • ORMLite-Beispiele für Android werden nicht kompiliert
  • Daten werden von einem bestimmten Tabellendatum anstatt aller Tabelle in sqlite gefüllt
  • Validieren Paypal Pay ID übergeben von Android in Magento Website
  • 5 Solutions collect form web for “ParS JSON Daten mit JSONReader oder JSONObject / JSONArray”

    Wenn ich es tun würde, werde ich die ganze Saite zu einem JSONObject analysieren

     JSONObject obj = new JSONObject(str); 

    Dann sehe ich, dass deine Unterkategorien ein JSONArray sind. Also werde ich es so umwandeln

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

    Mit diesem können Sie eine Schleife machen und Ihr Klassenobjekt instanziieren

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

    Sie können JSON Object / JSON Array nur verwenden, wenn die Größe Ihrer json Daten weniger als 1MB beträgt. Sonst solltest du mit JSONReader gehen. JSONReader tatsächlich verwenden Streaming-Ansatz, während JSONObject und JSONArray schließlich laden alle Daten auf RAM auf einmal, die OutOfMemoryException im Falle von größeren json verursacht.

    GSON ist der einfachste Weg, wenn man mit verschachtelten Objekten arbeiten muss.

    so was:

     //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; } 

    Sie können dieses Tutorial, http://androidsmith.com/2011/07/using-gson-to-parse-json-on-android/ oder http://www.javacodegeeks.com/2011/01/android-json überprüfen -parsing-gson-tutorial.html oder http://www.androidhive.info/2012/01/android-json-parsing-tutorial/

    Dies ist ein einfaches Beispiel für die Verwendung von Gson für die Modellierung von Arraylisten von Objekten über JsonReader:

     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()); } } 

    Und das Objekt i modelliert:

     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"; } 

    Die von Ihnen geposteten Beispiel-JSON-Daten scheinen der Datenstruktur des JSON nicht zu folgen. Sie müssen Sie Daten genau die gleiche Weise wie in der dritten Link von Mustafa gepostet. Das ist ein wirklich tolles Tutorial. Ich folgte den Stufen und es funktioniert wirklich!

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.