如何使用GSON反序列化无密钥数组?

时间:2012-06-24 10:45:57

标签: java arrays json deserialization gson

我喜欢使用GSON反序列化以下JSON字符串。

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

我已经准备好了名为 Response Features Geometry Coordinates 的必要Java类。除了最后一堂课,一切都很好。但对于坐标,我不明白我应该写什么,因为没有给出我可以准备作为成员变量的键。
这是父 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;
}

...和空坐标类。

package info.metadude.trees.model.vienna;    
public class Coordinates {
    // TODO: No idea what should be defined here.
}

1 个答案:

答案 0 :(得分:2)

您可以在coordinates中使用Geometry作为集合属性。这会自动将值映射到正确的属性。

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<Float> coordinates;

        public List<Float> getCoordinates() {
            return coordinates;
        }

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

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

    }

}