2012-02-10 27 views
11

Estoy intentando codificar esta cadena para una solicitud POST. ¿Puede alguien decirme cómo puedo codificarCómo anidar objetos al compilar JSON con JSONObject

{"jsonrpc": "2.0", "method": "Files.GetSources", "params":{"media":"music"}, "id": 1} 

Hasta ahora tengo

JSONOjbect obj = new JSONObject(); 
obj.put("jsonrpc", "2.0"); 
obj.put("method", "Files.GetSources"); 

Pero no estoy seguro de cómo poner en el resto - ¿alguien puede ayudar?

+0

Vas a tener que ser más específico _a Lot_ si espera respuestas útiles. –

Respuesta

22

si estás preguntando cómo se había puesto el params objeto anidado allí, lo que probablemente hace:

JSONObject params = new JSONObject(); 
params.put("media", "music"); 

obj.put("params", params); 

utilizar una matriz (por sus comentarios a continuación), que' Haga algo como esto:

JSONArray properties = new JSONArray(); 
properties.put("resume"); 
properties.put("genre"); 
properties.put("studio"); 
... 

JSONObject params = new JSONObject(); 
params.put("properties", properties); 

obj.put("params", params); 
+0

gracias! ¡Eso funciono! Lo siento por ser vago, ¿podría anidar varias veces? Por ejemplo ... para uno como este ... {"jsonrpc": "2.0", "método": "VideoLibrary.GetMovies", "params": {"propiedades": ["reanudar", "género", " studio "," tagline "," runtime "," fanart "," thumbnail "," file "," plot "," plotoutline "," year "," lastplayed "," rating "]}," id ": 1 } –

+0

Sí, puedes anidar cosas tan lejos como quieras (usando el mismo principio de esta respuesta). Para sus 'propiedades', usaría un [' JSONArray'] (http://developer.android.com/reference/org/json/JSONArray.html) en lugar de 'JSONObject'. –

+0

He actualizado mi respuesta con un ejemplo. –

0

Tiene dos opciones. Puede crear otro objeto que contenga "media":"music" y luego ponerlo en el JSONObject original o simplemente puede pasar toda esta cadena en el constructor JSONObject y hacer que lo analice por usted.

0
JSONOjbect obj = new JSONObject().put("jsonrpc", "2.0") 
    .put("method", "Files.GetSources").put("id", 1) 
    .put("params", new JSONObject.put("media", "music")); 

encadenamiento .put() como esto es posible porque put() devuelve el objeto que se llamaba en - para este propósito exacto.

+0

Faltan paréntesis: 'JSONOjbect obj = new JSONObject(). Put (" jsonrpc "," 2.0 ") .put (" método "," Files.GetSources "). Put (" id ", 1) . put ("params", nuevo JSONObject(). put ("media", "music")); ' – Andrea

0

Bueno, si usted tiene la cadena antes de la mano, sólo tiene que hacer

JSONObject object = JSONObject.getJSONObject("{\"jsonrpc\": \"2.0\", \"method\": \"Files.GetSources\", \"params\":{\"media\":\"music\"}, \"id\": 1}");