2012-12-06 3 views
6

Ich weiß, dass es viele JSON mit GSON-Fragen gibt, aber keiner von ihnen bezieht sich direkt auf mich. Mein JSON ist anders formatiert.Verwenden von Gson, um JSON-Array und Objekt ohne Namen zu analysieren

Ich habe eine JSON-Daten Ich möchte mit Gson analysieren, die wie folgt aussieht:

[ 
    { 
    "foo":"1", 
    "bar":[ { "_id":"bar1"} ], 
    "too":["mall", "park"] 
    } 
] 

Und ich habe die Modellklassen:

ItemArray Klasse

public class ItemArray 
{ 
    List<Item> itemArray; 

    //Get set here 
} 

Artikelnummer

public class Item 
{ 
    String foo; 
    List<Bar> bar; 
    List<String> too; 

    //Get set here 
} 

Bar Klasse

public class Bar 
{ 
    String id; 

    //Get set here 
} 

Heres die Frage. Ist das JSON im richtigen Format? Wenn ja, sind die Modellklassen im richtigen Format?

Wenn nicht, bitte schieben Sie mich in die richtige Richtung. Vielen Dank im Voraus!

PS. Ich kann das JSON-Datenformat bei Bedarf ändern.

Antwort

6

Nach Ihrer json, sollten Sie einfach haben:

public class ItemArray extends List<Item> { 
} 

, wenn Sie Sie Java-Klasse halten wollen und Ihre json ändern es sein sollte:

{ 
itemArray: [ 
    { 
     "foo":"1", 
     "bar":[ { "_id":"bar1"} ], 
     "too":["mall", "park"] 
    } 
    ] 
} 

Oh, und es gibt eine Mismatch mit der ID und _id für Bar:

public class Bar 
{ 
    String _id; 

    //Get set here 
} 

Sie auch eine Anmerkung verwenden könnte das Feld des ändern Name während Json de/Serialisierung.

Und last but not least, überlegen Sie, Ihre Werte besser einzugeben. Wenn Sie keine Daten als Zeichenfolgen sehen, werden Sie nicht viel Java-Code verarbeiten, um Dinge zu konvertieren. Zum Beispiel:

"foo" : 1, 

und siehe foo als ein int Datenelement, kein String.

+0

also mit anderen Worten, alles, was ich brauche, ist, dass eine Klasse ItemArray + th e Klasse natürlich, OHNE mein JSON-Format zu ändern? –

+0

Ich denke ja. Und die Bar von ID zu ID wechseln. – Snicolas

+0

ok lemme probiere es aus –

0

Um zu überprüfen, Json gültig Verwendung ist dieses Tool http://jsonlint.com/

Class Bar(
    private String _id; 
    //create getter/setters 
{ 

public class Item 
{ 
    String foo; 
    List<Bar> bar; 
    List<String> too; 

    //Get set here 
} 
//this is also fine 
public class ItemList 
{ 
    List<Item> itemArray; 

    //Get set here 
} 

Sie Liste der Elemente „ItemArray“ genannt, aber in Ihrem json Sie die entsprechende Anordnung der Elemente „ItemArray“ nicht genannt haben. Also make it itemArray, das Problem ist nicht in Ihrem JSON, es ist gültig. Problem ist in seiner Darstellung für Gson, Gson map Schlüssel von json auf die Variablen des Objekts (d. H. Java POJO) mit dem gleichen Namen. Wenn der Name Ihrer Liste Klasse ist

List<Item> itemArray; 

dann der entsprechende json Array-Name auch ItemArray, werfen Sie einen Blick Schlag

{ 
itemArray: [ 
    { 
     "foo":"1", 
     "bar":[ { "_id":"bar1"} ], 
     "too":["mall", "park"] 
    } 
    ] 
} 

so können Sie json in Objekt wie die

konvertieren sein sollte
Reader reader = new InputStreamReader(IOUtils.toInputStream(json_string)); 
ItemList itemList = json.toObject(reader, ItemList.class); 

, um weitere Informationen einen Blick in Schlag Bezug nehmen https://stackoverflow.com/questions/13625206/how-to-parse-the-result-in-java/13625567#13625567

+0

die erste Antwort beantwortete meine Frage. aber danke für deine Antwort und Einsicht. Das werde ich mir in Zukunft merken: D –

+0

Was ist, wenn ich das JSON-Format nicht ändern kann? Das heißt, wie kann ich das Modell einstellen, wenn ich das "itemArray" nicht im json hinzufügen kann? Vielen Dank. –

4

Einige Male haben wir JsonArray [ {..} , {..} ] als Antwort (ohne 'itemArray' Namen wie Ihre) In diesem Fall erhalten Sie

Type fooType = new TypeToken<ArrayList<Item>>() {}.getType(); 
List<Item> array = new Gson().fromJson(response, fooType); 

finden, die den Code verwenden können mehr über diese Official doc - Gson Array-Examples

2

Wenn Sie eine JsonArray wie [ {..} , {..} ] haben Sie können dies mit Gson tun:

Item[] items = gson.fromJson(json, Item[].class); 
+0

Wie analysiere ich das weiter ... zB Zugriff String in Item.class? –

Verwandte Themen