2011-04-26 17 views
18

Así que estoy usando GSON para analizar JSON desde una API y estoy atascado en cuanto a cómo analizar los campos dinámicos en los datos.Cómo analizar los campos dinámicos JSON con GSON?

Aquí es un ejemplo de los datos JSON devueltos en una consulta:

{ 

- 
30655845: { 
    id: "30655845" 
    name: "testdata 
    description: "" 
    latitude: "38" 
    longitude: "-122" 
    altitude: "0" 
    thumbnailURL: http://someimage.com/url.jpg 
    distance: 9566.6344386665 
} 
- 
28688744: { 
    id: "28688744" 
    name: "testdata2" 
    description: "" 
    latitude: "38" 
    longitude: "-122" 
    altitude: "0" 
    thumbnailURL: http://someimage.com/url.jpg 
    distance: 9563.8328713012 
} 
} 

La manera Actualmente estoy manejando los valores estáticos individuales es con una clase:

import com.google.gson.annotations.SerializedName; 

public class Result 
{ 
@SerializedName("id") 
public int id; 

@SerializedName("name") 
public String name; 

@SerializedName("description") 
public String description; 

@SerializedName("latitude") 
public Double latitude; 

@SerializedName("longitude") 
public Double longitude; 

@SerializedName("altitude") 
public Double altitude; 

@SerializedName("thumbnailURL") 
public String thumbnailURL; 

@SerializedName("distance") 
public Double distance; 
} 

y luego puedo simplemente use GSON para analizar eso:

Gson gson = new Gson(); 

Reader reader = new InputStreamReader(source); 

Result response= gson.fromJson(reader, Result.class); 

Sé que esto funciona en los subdatos ya que puedo consultar y obtener un entrada única y analizar eso con bastante facilidad, pero ¿qué pasa con los valores enteros aleatorios dados para cada valor en la matriz? (es decir, el 30655845 y el 2868874)

¿Alguna ayuda?

Respuesta

19

Según GSON documentation que puede hacer cosas como:

Type mapType = new TypeToken<Map<Integer, Result> >() {}.getType(); // define generic type 
Map<Integer, Result> result= gson.fromJson(new InputStreamReader(source), mapType); 

o se puede tratar de escribir custom serializer para su clase.

Descargo de responsabilidad: Yo también, no tengo experiencia con GSon pero con otros marcos como Jackson.

+1

Clavado, esto funcionó perfectamente. Muchas gracias. : D –

+0

¿Hay alguna manera de analizar el mismo pero usando NewtonSoft? –

Cuestiones relacionadas