2011-06-22 18 views
14

Estoy tratando de analizar una salida desde un servidor que tiene este aspecto:Analizar JSON con org.json

{ 
    "GetFolderFilesByZoneResult": [ 
    { 
     "ID": 98748, 
     "CreatedBy": "", 
     "UpdatedBy": "none", 
     "CreatedDate": "\/Date(1308273033620+0100)\/", 
     "UpdatedDate": "\/Date(1308303003770+0100)\/", 
     "CommentCount": 0, 
     "Key": "", 
     "Enabled": true, 
     "MimeType": "video", 
     "Votes": 2, 
     "TotalRating": 0, 
     "AllowComments": true, 
     "ViewCount": 323, 
     "ReleaseDate": "\/Date(1308273000000+0100)\/", 
     "ExpireDate": "\/Date(4102444800000+0000)\/", 
     "Author": "", 
     "Size": 133799936, 
     "Tag1": "", 
     "Tag2": "", 
     "Tag3": "", 
     "RecycleBin": false 
    }, 
    { 
     "ID": 99107, 
     "CreatedBy": "", 
     "UpdatedBy": "none", 
     "CreatedDate": "\/Date(1308583412520+0100)\/", 
     "UpdatedDate": "\/Date(1308583564007+0100)\/",  
     "CommentCount": 0, 
     "Key": "", 
     "Enabled": true, 
     "MimeType": "video", 
     "Votes": 0, 
     "TotalRating": 0, 
     "AllowComments": true, 
     "ViewCount": 33, 
     "ReleaseDate": "\/Date(1308583380000+0100)\/", 
     "ExpireDate": "\/Date(4102444800000+0000)\/", 
     "Author": "", 
     "Size": 47955968, 
     "Tag1": "", 
     "Tag2": "", 
     "Tag3": "", 
     "RecycleBin": false 
    } 
    ] 
} 

Estoy intentando utilizar org.json Java para analizarlo, pero yo don' Tengo experiencia con JSON/org.json, así que estoy teniendo un pequeño problema. ¿Cómo puedo analizar esto?

+0

Después de analizar los datos de la entrada JSON, ¿cómo piensa utilizarlos en el código Java? ¿Está tratando de completar una estructura personalizada de datos de Java, o simplemente desea recuperar rápidamente uno o dos valores del JSON y seguir adelante? –

Respuesta

29

1) Suponiendo que tiene las librerías JSON en su ruta (desde www.json.org), es bastante fácil.

import org.json.JSONTokener; 
... 

URI uri = new URI("http://someserver/data.json"); 
JSONTokener tokener = new JSONTokener(uri.toURL().openStream()); 
JSONObject root = new JSONObject(tokener); 

Desde allí, puede abordar las distintas partes del objeto JSON. Eche un vistazo a los Javadocs para los detalles. https://developer.android.com/reference/org/json/package-summary.html

+0

Con eso obtengo el siguiente error en la última línea: Excepción en el hilo "principal" java.lang.RuntimeException: Código fuente no disponible - Tipo de simbolo erróneo:

+0

¿Se puede publicar el código con el que tiene problemas? – JohnnyO

+0

Con el código exacto que ha publicado, la única diferencia es la url usada –

-2

Me lo paso

map<String, Object> 

cargado con

map<String, Object> 

en el campo del objeto.

Básicamente recreando la jerarquía de sus clases de Java dentro de un mapa grande.

Ejemplo:

return (Map<"GetFolderFilesByZoneResult", Map<"Result1", (object by id 98748) | "Result2", (object by id 99107) | "Result3", etc. 

JSON volverá tan grande mapa muy bonita como, programación y es más fácil de hacer, entonces las listas.

+1

Veo, pero ¿cómo puedo analizar esos objetos/matrices/valores con org.json? ¿Puedes proporcionar algún código? –

+0

Lo hace automágicamente. Empuje un objeto y lo decodifica. Por ejemplo, en mi ejemplo de mapa, decodifica el campo de variable de objetos "String ID = 99107" en JSON como "ID: 99107". – TravMan

+0

Creo que la pregunta era exactamente lo contrario, toma un contenido json y obtén su valor en el objeto java. –

4

Aquí está la solución más universal, que permite analizar cualquier tipo JSON en el tipo Java adecuada:

Object json = new JSONTokener(response).nextValue(); 

A continuación, se puede determinar el tipo y resulta manejarlo adecuadamente.