Hoe een keyless array met GSON deserialiseren?

Ik gebruik graag GSON om de volgende JSON-reeks te deserialiseren.

{
  "type": "FeatureCollection",
  "features": [
    {
      "id": "FSROGD.4440181",
      "geometry": {
        "type": "Point",
        "coordinates": [
          16.7594706041998,
          43.148716514354945
        ]
      }
    }
  ]
}

Ik heb de benodigde Java-klassen al voorbereid genaamd Reactie , Functies , Geometrie en Coördinaten . Naast de laatste les werkt alles goed. Maar voor Coördinaten begrijp ik niet wat ik moet schrijven omdat er geen sleutels worden gegeven die ik als lidvariabelen kan voorbereiden.
Dit zijn de bovenliggende categorieën Geometry ...

package info.metadude.trees.model.vienna;    
import com.google.gson.annotations.SerializedName;

public class Geometry {     
    @SerializedName("type")
    public String type;

   //TODO: Prepare Coordinates class for GSON.
   //@SerializedName("coordinates")
   //public Coordinates coordinates;
}

... en de lege klasse Coordinates .

package info.metadude.trees.model.vienna;    
public class Coordinates {
   //TODO: No idea what should be defined here.
}
1
Ik denk niet dat coördinaten een klasse zelf zouden moeten zijn, maar slechts een reeks dubbelen in de meetkundeklasse. Of u zou uw eigen serializer en deserializer moeten opgeven.
toegevoegd de auteur Roger Lindsjö, de bron

1 antwoord

U kunt coördinaten gebruiken als verzamelingseigenschap in Geometrie . Hierdoor worden de waarden automatisch toegewezen aan de juiste property.

import java.util.List;

import com.google.gson.Gson;

public class GSonTest {

    public static void main(final String[] args) {
        Gson gson = new Gson();
        System.out.println(gson.fromJson("{        \"type\": \"Point\",        \"coordinates\": [          16.7594706041998,          43.148716514354945        ]      }", Geometry.class));
    }

    public static class Geometry {

        List coordinates;

        public List getCoordinates() {
            return coordinates;
        }

        public void setCoordinates(final List coordinates) {
            this.coordinates = coordinates;
        }

        @Override
        public String toString() {
            return "Geometry [coordinates=" + coordinates + "]";
        }

    }

}
2
toegevoegd
Kunt u de relevante Java-code toevoegen?
toegevoegd de auteur JJD, de bron
Ik zou voor Double gaan omdat Float de waarden verkort. Ook, voor zover ik begreep, hoef ik geen getters en setters toe te voegen als mijn lid openbaar is (ik gebruik het in een Android-omgeving).
toegevoegd de auteur JJD, de bron
dit is juist :)
toegevoegd de auteur Francisco Spaeth, de bron