2012-04-25 12 views
22

voglio convertire la seguente stringa JSON in un oggetto Java:Come convertire la seguente stringa json nell'oggetto java?

String jsonString = "{ 
"libraryname":"My Library", 
"mymusic":[{"Artist Name":"Aaron","Song Name":"Beautiful"}, 
{"Artist Name":"Britney","Song Name":"Oops I did It Again"}, 
{"Artist Name":"Britney","Song Name":"Stronger"}]}" 

Il mio obiettivo è di accedere facilmente qualcosa come:

(e.g. MyJsonObject myobj = new MyJsonObject(jsonString) 
myobj.myrows[0].id would give me the ID, myobj.libraryname gives me "My Library"). 

Ho sentito parlare di Jackson, ma sono incerto come usarlo per adattare la stringa json che ho dal momento che non sono solo coppie di valori chiave a causa della lista "mymusic" coinvolta. Come posso realizzare questo con Jackson o c'è un modo più semplice per farlo se Jackson non è il migliore per questo?

+0

possibile duplicato di [? Convertire una stringa JSON di opporsi in Java] (http://stackoverflow.com/questions/1395551/convert-a-json-string-to-object-in -java) – bummi

risposta

60

Non c'è bisogno di andare con GSON per questo; Jackson può fare sia pianura Maps/Liste:

ObjectMapper mapper = new ObjectMapper(); 
Map<String,Object> map = mapper.readValue(json, Map.class); 

o più comodo JSON Albero:

JsonNode rootNode = mapper.readTree(json); 

A proposito, non v'è alcun motivo per cui non si poteva effettivamente creare classi Java e di farlo (IMO) più comodamente:

public class Library { 
    @JsonProperty("libraryname") 
    public String name; 

    @JsonProperty("mymusic") 
    public List<Song> songs; 
} 
public class Song { 
    @JsonProperty("Artist Name") public String artistName; 
    @JsonProperty("Song Name") public String songName; 
} 

Library lib = mapper.readValue(jsonString, Library.class); 
+0

ho una soluzione dal tuo codice. grazie –

+0

Ho provato a inviare questo tipo di stringa json con jackson ma restituisce solo valori null, '[{" id ": 62," nome ":" nomeprogetto1 "," batchClassId ": 1283," batchClassName ":" sample_batchclass26 " , "assetCount": 0}, {"id": 8, "nome": "projectname_tmp", "batchClassId": 1283, "batchClassName": "sample_batchclass26", "assetCount": 0}] " –

+0

Questo è un JSON Array, quindi deve essere associato a Java 'Collection' (come' List') o array (può usare type 'Object []. Class'). O solo per 'java.lang.Object' (sarà di tipo' List'). Funzionerà bene. – StaxMan

0

GSON è anche un bene per esso: http://code.google.com/p/google-gson/

" GSON è una libreria Java che può essere utilizzato per convertire oggetti Java nella loro rappresentazione JSON Può anche essere utilizzato per convertire una stringa JSON a una Java equivalente. . oggetto GSON può lavorare con oggetti Java arbitrari inclusi gli oggetti preesistenti che non hai il codice sorgente di "

Controllare gli esempi API:. https://sites.google.com/site/gson/gson-user-guide#TOC-Overview altri esempi: http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/

4

Partenza GSON di Google: http://code.google.com/p/google-gson/

Dal loro sito:

Gson gson = new Gson(); // Or use new GsonBuilder().create(); 
MyType target2 = gson.fromJson(json, MyType.class); // deserializes json into target2 

Si sarebbe solo bisogno di fare una classe MyType (rinominato, ovviamente) con tutti i campi nella stringa JSON. Potrebbe essere un po 'più complicato quando si eseguono gli array, se si preferisce eseguire manualmente tutto l'analisi (anche molto semplice), controllare http://www.json.org/ e scaricare il codice sorgente Java per gli oggetti parser Json.

+0

che funziona come un fascino –

Problemi correlati