Análisis de un archivo JSON con Gson 2.3.1

votos
0

Teniendo este fichero JSON para analizar la biblioteca GSON

{type: FeatureCollection,features: [{type:Feature,properties:{qualityScore:72,formattedAddress:Rue du Commerce; 4100 Seraing; Belgium,address:rue du commerce,name:rue du commerce},geometry:{type:Point,coordinates:[5.50852,50.612572]}},{type:Feature,properties:{qualityScore:72,formattedAddress:Rue du Commerce; 4219 Meeffe; Belgium,address:rue du commerce,name:rue du commerce},geometry:{type:Point,coordinates:[5.01752,50.606201]}},{}]}

Así que este es uno og los granos que he creado para poblarlo desde el archivo JSON

import java.util.List;
import com.google.gson.annotations.Expose;

public class Address {

    @Expose
    private String type;

    @Expose
    private List<GeolocationFeature> features = new ArrayList<GeolocationFeature>();

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public List<GeolocationFeature> getFeatures() {
        return features;
    }

    public void setFeatures(List<GeolocationFeature> features) {
        this.features = features;
    }

    @Override
    public String toString() {
        return Address [type= + type + , features= + features
                + ];
    }
}

A continuación, cuando trato de analizarlo con Gson:

GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
Type listType = new TypeToken<List<Address>>() {}.getType();
gson.fromJson(jsonString, listType);

Tengo este extraño error:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
Publicado el 23/07/2015 a las 08:58
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
1

El problema es que usted está tratando de analizar un objeto JSON en una lista.

La lista está representado por la propiedad "características" en el objeto JSON que está recibiendo. Puede crear una clase contenedora con la misma estructura que la respuesta JSON y luego usar GSON a analizarlo.

public class AddressWrapper {

    private String type;
    private List<Address> addresses;

    // getters and setters, etc...
}

A continuación, puede analizar con GSON:

AddressWrapper addressWrapper = gson.fromJson(jsonString, AddressWrapper.class);

Y acceder a las direcciones:

List<Address> addresses = addressWrapper.getAddresses();

O, alternativamente, puede crear una lógica de análisis personalizada y utilizarlo para extraer el contenido de la propiedad "características" del objeto principal JSON y analizar a una lista. Puede consultar la documentación GSON respecto Desearializers de hacer eso.

Respondida el 23/07/2015 a las 09:24
fuente por usuario

votos
0

Lo tengo:

GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
gson.fromJson(jsonString, Address.class);
Respondida el 23/07/2015 a las 09:27
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more