2012-04-25 23 views
22

Quiero cambiar la siguiente cadena JSON en un objeto java:Cómo convertir la siguiente cadena json a objeto 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"}]}" 

Mi objetivo es acceder a él fácilmente algo como:

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

He oído hablar de Jackson, pero no estoy seguro cómo usarlo para encajar en la cadena json que tengo, ya que no solo se trata de pares de valores clave debido a la lista "mymusic" involucrada. ¿Cómo puedo lograr esto con Jackson o hay alguna manera más fácil de lograr esto si Jackson no es el mejor para esto?

+0

posible duplicado de [? Convertir una cadena JSON para oponerse en Java] (http://stackoverflow.com/questions/1395551/convert-a-json-string-to-object-in -java) – bummi

Respuesta

60

No hay necesidad de ir con GSON para esto; Jackson puede hacer cualquiera Mapas/Listas de civil:

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

o más conveniente JSON árbol:

JsonNode rootNode = mapper.readTree(json); 

Por cierto, no hay ninguna razón por la cual no podría en realidad crear clases Java y hacerlo (OMI) más convenientemente:

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

obtuve la solución de su código. gracias –

+0

Intenté enviar este tipo de cadena json con jackson pero devuelve solo valores nulos, '[{" id ": 62," name ":" projectname1 "," batchClassId ": 1283," batchClassName ":" sample_batchclass26 " "assetCount": 0}, {"id": 8, "name": "projectname_tmp", "batchClassId": 1283, "batchClassName": "sample_batchclass26", "assetCount": 0}] ' –

+0

Eso es un JSON Array, por lo que debe estar vinculado a Java 'Collection' (como' List') o array (puede usar type 'Object []. Class'). O solo a 'java.lang.Object' (será de tipo' List'). Funcionará bien. – StaxMan

0

Gson también es bueno para ella: http://code.google.com/p/google-gson/

" Gson es una biblioteca de Java que se puede utilizar para convertir objetos Java en su representación JSON También se puede utilizar para convertir una cadena JSON a un equivalente Java. . Gson objeto puede trabajar con objetos Java arbitraria que incluye objetos preexistentes que usted no tiene el código fuente de "

Compruebe los ejemplos: API. https://sites.google.com/site/gson/gson-user-guide#TOC-Overview más ejemplos: http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/

4

Salida Gson de Google: http://code.google.com/p/google-gson/

Desde su página web:

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

sólo se necesita para hacer una clase MyType (renombrado, por supuesto) con todos los campos de la cadena JSON. Puede ser un poco más complicado cuando estás haciendo los arreglos, si prefieres hacer todo el análisis manualmente (también es bastante fácil) mira http://www.json.org/ y descarga el código fuente de Java para los objetos del analizador Json.

+0

que funciona como un encanto –