it-swarm.com.de

Analysieren Sie JSON-Daten mit JSONReader oder JSONObject/JSONArray

Ich habe JSON (siehe unten), ich versuche, das gesamte JSON zu analysieren, und jedes Objekt ist eine neue Instanz einer Klasse, die die folgenden Variablen deklariert. Wie geht das am besten? Soll ich einen JSONReader oder JSONObject und JSONArray verwenden? Ich habe einige Tutorials gelesen und einige allgemeine Fragen gestellt, aber ich habe keine Beispiele dafür gesehen, wie man solche Daten auswertet.

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

wenn ich es tun würde, würde ich die gesamte Zeichenfolge in ein JSONObject analysieren

JSONObject obj = new JSONObject(str);

dann sehe ich, dass Ihre Unterkategorien ein JSONArray ist. Also werde ich es so konvertieren

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

damit können Sie eine Schleife ausführen 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"));
2
chuntato

Sie können JSON Object/JSON Array nur verwenden, wenn die Größe Ihrer JSON-Daten weniger als 1 MB beträgt. Sonst sollten Sie mit JSONReader gehen. JSONReader verwendet tatsächlich den Streaming-Ansatz, während JSONObject und JSONArray schließlich alle Daten auf RAM gleichzeitig laden, was bei größerem json OutOfMemoryException verursacht.

9
Yasir Ali

GSON ist der einfachste Weg, wenn Sie mit verschachtelten Objekten arbeiten müssen.

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 überprüfen, http://androidsmith.com/2011/07/using-gson-to-parse-json-on-Android/ oder http://www.javacodegeeks.com/2011 /01/Android-json-parsing-gson-tutorial.html oder http://www.androidhive.info/2012/01/Android-json-parsing-tutorial/

5
Mustafa Ferhan

dies ist ein einfaches Beispiel für die Verwendung von Gson zum Modellieren 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, das ich modelliert habe:

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";
}
1
kasra fallen

Die von Ihnen veröffentlichten JSON-Beispieldaten scheinen nicht der Datenstruktur von JSON zu entsprechen. Sie müssen Ihre Daten genauso erstellen, wie es im dritten von Mustafa veröffentlichten Link beschrieben ist. Dies ist ein wirklich tolles Tutorial. Ich bin den Schritten gefolgt und es funktioniert wirklich!

0
Lee-Ying Wu
 //import Java.util.ArrayList;
 //import org.bson.Document;


 Document root = Document.parse("{ \"id\" : 356, \"hassubcategories\" : true, \"subcategories\" : [{ \"id\" : 3808, \"CategoryName\" : \"Current Products\", \"CategoryImage\" : \"image.img\", \"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\" : \"image.img\", \"hassubcategories\" : true, \"subcategories\" : [{ \"id\" : 4107, \"CategoryName\" : \"Desk\", \"CategoryImage\" : \"2638\", \"hassubcategories\" : true, \"subcategories\" : [{ \"id\" : 392, \"CategoryName\" : \"Wood\", \"CategoryImage\" : \"2746\", \"hassubcategories\" : false }] }] }] }");

 System.out.println((root.get("id")));
 System.out.println((root.get("hassubcategories")));
 System.out.println((((Document)((ArrayList)root.get("subcategories")).get(0)).get("id")));
 System.out.println(((String)((Document)((ArrayList)root.get("subcategories")).get(0)).get("CategoryName")));
 System.out.println(((String)((Document)((ArrayList)root.get("subcategories")).get(0)).get("CategoryImage")));
 System.out.println((((Document)((ArrayList)root.get("subcategories")).get(0)).get("hassubcategories")));
 System.out.println((((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(0)).get("subcategories")).get(0)).get("id")));
 System.out.println(((String)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(0)).get("subcategories")).get(0)).get("CategoryName")));
 System.out.println(((String)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(0)).get("subcategories")).get(0)).get("CategoryImage")));
 System.out.println((((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(0)).get("subcategories")).get(0)).get("hassubcategories")));
 System.out.println((((Document)((ArrayList)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(0)).get("subcategories")).get(0)).get("subcategories")).get(0)).get("id")));
 System.out.println(((String)((Document)((ArrayList)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(0)).get("subcategories")).get(0)).get("subcategories")).get(0)).get("CategoryName")));
 System.out.println(((String)((Document)((ArrayList)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(0)).get("subcategories")).get(0)).get("subcategories")).get(0)).get("CategoryImage")));
 System.out.println((((Document)((ArrayList)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(0)).get("subcategories")).get(0)).get("subcategories")).get(0)).get("hassubcategories")));
 System.out.println((((Document)((ArrayList)root.get("subcategories")).get(1)).get("id")));
 System.out.println(((String)((Document)((ArrayList)root.get("subcategories")).get(1)).get("CategoryName")));
 System.out.println(((String)((Document)((ArrayList)root.get("subcategories")).get(1)).get("CategoryImage")));
 System.out.println((((Document)((ArrayList)root.get("subcategories")).get(1)).get("hassubcategories")));
 System.out.println((((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(1)).get("subcategories")).get(0)).get("id")));
 System.out.println(((String)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(1)).get("subcategories")).get(0)).get("CategoryName")));
 System.out.println(((String)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(1)).get("subcategories")).get(0)).get("CategoryImage")));
 System.out.println((((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(1)).get("subcategories")).get(0)).get("hassubcategories")));
 System.out.println((((Document)((ArrayList)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(1)).get("subcategories")).get(0)).get("subcategories")).get(0)).get("id")));
 System.out.println(((String)((Document)((ArrayList)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(1)).get("subcategories")).get(0)).get("subcategories")).get(0)).get("CategoryName")));
 System.out.println(((String)((Document)((ArrayList)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(1)).get("subcategories")).get(0)).get("subcategories")).get(0)).get("CategoryImage")));
 System.out.println((((Document)((ArrayList)((Document)((ArrayList)((Document)((ArrayList)root.get("subcategories")).get(1)).get("subcategories")).get(0)).get("subcategories")).get(0)).get("hassubcategories")));
0
Mateo