2013-08-13 28 views
7

Wie konvertiert man diese Zeichenfolge richtig in ein JsonArray?Konvertieren String in JsonArray

{ 
    "myArray": [ 
    { "id": 1, 
     "att1": 14.2, 
     "att2": false }, 
    { "id": 2, 
     "att1": 13.2, 
     "att2": false }, 
    { "id": 3, 
     "att1": 13, 
     "att2": false } 
    ]} 

Ein JSONArray jArray = new JSONArray(STRING_FROM_ABOVE); Ergebnisse in jArray.length = 1 Es ist mein erstes Mal mit json in Kontakt zu treten :)

+0

Die Zeichenfolge ist ein JSON-Objekt, kein Array (beachten Sie die äußersten Klammern). – Henry

Antwort

10

Try this:

JSONObject jObject = new JSONObject(STRING_FROM_ABOVE); 
JSONArray jArray = jObject.getJSONArray("myArray"); 

Die "string_from_above" ist kein Json Array, es ist ein JSON-Objekt, die ein Attribut (arr), die ein JSON-Array ist;)

Anschließend können Sie tun :

for (int i = 0; i < jArray.length(); i++) { 
     JSONObject jObj = jArray.getJSONObject(i); 
     System.out.println(i + " id : " + jObj.getInt("id")); 
     System.out.println(i + " att1 : " + jObj.getDouble("att1")); 
     System.out.println(i + " att2 : " + jObj.getBoolean("att2")); 
} 
+1

Vielen Dank ... ich sollte wirklich näher auf Json und ihre Syntax aussehen :) – DieselPower

+0

Kein Problem, vergessen Sie nicht, die Antwort zu akzeptieren :) – Organ

+0

So können Sie nicht sagen jArray [i]; nicht wahr? – marciokoko

0

Werfen Sie einen Blick auf JQuery, und die Parse-Funktion im Besonderen. Dadurch wird ein Json-Array direkt in ein Objekt zerlegt.

+0

Jason, wirklich !! – blackpanther

+0

Autokorrektur! Es ist sowieso phonetisch korrekt. – PizzaTheHut

2

Während Parsen, fügen Sie Werte auf Objekte und Arraylisten oder aber, wie Sie wollen, es zu benutzen. Viel Glück.

JSONObject jo = new JSONObject(STRING_FROM_ABOVE); 
JSONArray rootArray= jo.getJSONArray("myArray"); 
int rootArrayLength=rootArray.length(); 
for(int i=0;i<rootArrayLength;i++){ 
    int id= rootArray.getJSONObject(i).getInt("id"); 
    // do same for others too and create an object 
} 
// create object and make a list 
1

einfach ein weiteres Verfahren in die Mischung hier zu werfen, würde ich empfehlen gerne einen Blick auf Gson nehmen. Gson ist eine Bibliothek, die die Serialisierung und Deserialisierung von Java-Objekten zum Kinderspiel macht. Zum Beispiel mit der Zeichenfolge, können Sie dies tun:

// Declare these somewhere that is on the classpath 
public class ArrayItem{ 
    public int id; 
    public double att1; 
    public boolean att2; 
} 

public class Container{ 
    public List<ArrayItem> myArray; 
} 

// In your code 
Gson gson = new Gson(); 

Container container = gson.fromJson(json, Container.class); 

for(ArrayItem item : container.myArray){ 
    System.out.println(item.id); // 1, 2, 3 
    System.out.println(item.att1); // 14.2, 13.2, 13.0 
    System.out.println(item.att2); // false, false, false 
} 

Ebenso können Sie gehen nach hinten zu sehr leicht.

String jsonString = gson.toJson(container); 
// jsonString no contains something like this: 
// {"myArray":[{"id":1,"att1":14.2,"att2":false},{"id":2,"att1":13.2,"att2":false},{"id":3,"att1":13.0,"att2":false}]} 

Der primäre Vorteil, dass mit so etwas wie Gson bietet, ist, dass Sie jetzt alle Java Typprüfung standardmäßig verwenden können, statt mit sich selbst Attributnamen und -typen zu verwalten. Es ermöglicht Ihnen auch, einige raffinierte Dinge wie das Replizieren von Typhierarchien zu tun, die die Verwaltung einer großen Anzahl von Json-Nachrichten zum Kinderspiel machen. Es funktioniert gut mit Android, und das Glas selbst ist winzig und erfordert keine zusätzlichen Abhängigkeiten.