有谁知道我怎么能转换这个
"polygon":[{"x":23.5980319,"y":37.9554494},{"x":23.5967015,"y":37.9557201}]
使用Gson 到GeoPoint
答案 0 :(得分:1)
class ClassA{
List<Point> polygon;
}
class Point{
double x;
double y;
}
public static void main(String args[]){
String json= "{\"polygon\":[{\"x\":23.5980319,\"y\":37.9554494},{\"x\":23.5967015,\"y\":37.9557201}]}";
ClassA inpList = new Gson().fromJson(json, ClassA.class);
for (Point point : inpList.polygon) {
System.out.println(point.x);
System.out.println(point.y);
}
}
答案 1 :(得分:1)
快速回答:可能您需要编写自定义反序列化程序。
详细解答:从这里到最后。
回答之前的两件重要事情。
{
或[
开始。我保留你的JSON字符串,因为在99%的情况下,你没有控制你想要解析的字符串。GeoPoint
:我找到了至少3个不同的包,其中包含此类:org.mapsforge.android.maps.GeoPoint
,org.andnav.osm.util.GeoPoint
和com.google.android.maps.GeoPoint
。所有这些都有共同之处,那就是没有默认的构造函数。他们需要实例化两个双打或整数。所以我创建了一个“假的”GeoPoint类来回答这个问题,假设您想要使用其中一个。如果没有,另一个答案很合适,你真的不需要这个。由于您没有默认构造函数,因此使用Gson的最佳方法是自定义反序列化程序。我将通过以下代码向您展示我是如何解决它的。
public class Container {
public List<GeoPoint> polygon;
@Override
public String toString() {
return "Container [polygon=" + polygon + "]";
}
}
然后YAGI(又一个GeoPoint实现),请注意我使用a和b作为成员变量,因为我没有对GeoPoint
的内部进行假设(即Gson使用反射来填充字段)
public class GeoPoint {
// this is not a real GeoPoint. Just a stub to avoid importing things
// I do not want to import to answer!
double a;
double b;
public GeoPoint(Double a, Double b){
this.a = a;
this.b = b;
}
@Override
public String toString() {
return "GeoPoint [x=" + a + ", y=" + b + "]";
}
}
然后你需要一个反序列化器(这不适用于com.google.android.maps.GeoPoint
,因为它使用int,但你可以根据你的需要调整它)
public class GeoPointDeserializer implements JsonDeserializer<GeoPoint> {
@Override
public GeoPoint deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
if (json.isJsonNull())
return null;
Double x = json.getAsJsonObject().get("x").getAsDouble();
Double y = json.getAsJsonObject().get("y").getAsDouble();
return new GeoPoint(x, y);
}
}
最后,这段代码完成了这项工作:
public class Q1925216 {
public static void main(String[] args){
String json = "\"polygon\":[{\"x\":23.5980319,\"y\":37.9554494},{\"x\":23.5967015,\"y\":37.9557201}]";
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(GeoPoint.class, new GeoPointDeserializer());
Gson gson = gsonBuilder.create();
Container c = gson.fromJson("{"+json+"}", Container.class);
System.out.println(c);
}
}
这是我的执行:
Container [polygon = [GeoPoint [x = 23.5980319,y = 37.9554494],GeoPoint [x = 23.5967015,y = 37.9557201]]]