2011-08-25 32 views
8

Básicamente tengo:¿Cómo puedo convertir un JSONArray en un JSONObject?

JSONArray j = new JSONArray(); 
j.add(new JSONObject()); //JSONObject has a bunch of data in it 
j.add(new JSONArray()); //JSONArray has a bunch of data in it 

Y ahora me gustaría convertir esa JSONArray en un JSONObject con la misma información en el mismo. Para poder pasar el Objeto y luego, cuando quiera, puedo tomar toda la información del objeto. Cualquier ayuda será apreciada, gracias.

+0

Bueno Intenté usar JSONArray.toJSONObject (arg) pero im nuevo a JSON que no podía dar con lo que la API quería poner en para el arg. http://json-lib.sourceforge.net/apidocs/net/sf/json/JSONArray.html#toJSONObject(net.sf.json.JSONArray) – Grammin

Respuesta

17

Normalmente, un objeto Json contendría sus valores (incluidas las matrices) como campos con nombre dentro. Por lo tanto, algo como:

JSONObject jo = new JSONObject(); 
JSONArray ja = new JSONArray(); 
// populate the array 
jo.put("arrayName",ja); 

Que en JSON será {"arrayName": [...]}.

+1

Sí, eso es lo que tenía que hacer en lugar de simplemente agregar mis valores a un array Acabo de agregarlos a un objeto y le di a cada uno un identificador de nombre. Gracias. – Grammin

1

¿No se puede obtener originalmente los datos como JSONObject?

¿Quizás analizar la cadena como JSONObject y JSONArray en primer lugar? ¿De dónde viene la cadena JSON?

No estoy seguro de que sea posible convertir un JsonArray en un JsonObject.

supongo que usted está usando lo siguiente de json.org

  • JSONObject.java
    Un JSONObject es una colección desordenada de pares nombre/valor. Su forma externa es una cadena envuelta en llaves con dos puntos entre los nombres y valores, y comas entre los valores y los nombres. La forma interna es un objeto que tiene los métodos get() y opt() para acceder a los valores por nombre, y los métodos put() para agregar o reemplazar valores por nombre. Los valores pueden ser cualquiera de estos tipos: Boolean, JSONArray, JSONObject, Number y String, o el objeto JSONObject.NULL.

  • JSONArray.java
    A JSONArray es una secuencia ordenada de valores. Su forma externa es una cadena envuelta entre corchetes con comas entre los valores. La forma interna es un objeto que tiene métodos get() y opt() para acceder a los valores por índice, y métodos put() para agregar o reemplazar valores. Los valores pueden ser cualquiera de estos tipos: Boolean, JSONArray, JSONObject, Number y String, o el objeto JSONObject.NULL.

2

Código:

List<String> list = new ArrayList<String>(); 

list.add("a"); 

JSONArray array = new JSONArray(); 

for (int i = 0; i < list.size(); i++) { 
    array.put(list.get(i)); 
} 
JSONObject obj = new JSONObject(); 

try { 
    obj.put("result", array); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 
1

tengo JSONObject así: {"status":[{"Response":"success"}]}.

Si quiero convertir el valor JSONObject, que es un JSONArray en JSONObject automáticamente sin usar ningún valor estático, aquí está el código para eso.

JSONArray array=new JSONArray(); 
JSONObject obj2=new JSONObject(); 
obj2.put("Response", "success"); 
array.put(obj2); 
JSONObject obj=new JSONObject(); 
obj.put("status",array); 

La conversión de la JSONArray a JSON del objeto:

Iterator<String> it=obj.keys(); 
     while(it.hasNext()){ 
String keys=it.next(); 
JSONObject innerJson=new JSONObject(obj.toString()); 
JSONArray innerArray=innerJson.getJSONArray(keys); 
for(int i=0;i<innerArray.length();i++){ 
JSONObject innInnerObj=innerArray.getJSONObject(i); 
Iterator<String> InnerIterator=innInnerObj.keys(); 
while(InnerIterator.hasNext()){ 
System.out.println("InnInnerObject value is :"+innInnerObj.get(InnerIterator.next())); 


} 
} 
Cuestiones relacionadas