java 使用 GSON 反序列化多个内部类
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14843322/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Deserializing Multiple inner classes using GSON
提问by vaultzero
I am trying Deserialize data from JSON object using gson. I am having trouble with 1)designing a class. 2) getting a null object from the inner list object.
我正在尝试使用 gson 从 JSON 对象反序列化数据。我在 1) 设计课程时遇到了麻烦。2) 从内部列表对象获取空对象。
Here is a sample of the JSON object
这是 JSON 对象的示例
{
"spatialReference" : {
"wkid" : 102113
},
"candidates" : [
{
"address" : "202 S Van Ness Ave, San Francisco, CA, 94110",
"location" : {
"x" : -13627444.2697,
"y" : 4546249.2471000031
},
"score" : 85.969999999999999,
"attributes" : {
"Loc_name" : "US_RoofTop",
"Score" : 85.969999999999999,
"Match_addr" : "505 S Van Ness Ave, San Francisco, CA, 94110",
"House" : "505",
"Side" : "R",
"PreDir" : "S",
"PreType" : "",
"StreetName" : "Van Ness",
"SufType" : "Ave",
"SufDir" : "",
"City" : "San Francisco",
"State" : "CA",
"ZIP" : "94110",
"X" : -122.417416,
"Y" : 37.764772999999998,
"Disp_Lon" : -122.416991,
"Disp_Lat" : 37.764809999999997,
"Addr_type" : "StreetAddress",
"Province" : "",
"Postal" : "",
"FromAddr" : "",
"ToAddr" : "",
"ZIP4" : "",
"ZIP4_TYPE" : "",
"User_fld" : "",
"Ldu" : "",
"xmin" : 0,
"xmax" : 0,
"ymin" : 0,
"ymax" : 0
}
},
{
"address" : "505 Van Ness Ave, San Francisco, CA, 94102",
"location" : {
"x" : -13627778.172800001,
"y" : 4548412.0926000029
},
"score" : 100,
"attributes" : {
"Loc_name" : "US_Streets",
"Score" : 100,
"Match_addr" : "505 Van Ness Ave, San Francisco, CA, 94102",
"House" : "",
"Side" : "L",
"PreDir" : "",
"PreType" : "",
"StreetName" : "Van Ness",
"SufType" : "Ave",
"SufDir" : "",
"City" : "San Francisco",
"State" : "CA",
"ZIP" : "94102",
"X" : -122.42041500000001,
"Y" : 37.780130999999997,
"Disp_Lon" : 0,
"Disp_Lat" : 0,
"Addr_type" : "StreetAddress",
"Province" : "",
"Postal" : "",
"FromAddr" : "501",
"ToAddr" : "525",
"ZIP4" : "",
"ZIP4_TYPE" : "",
"User_fld" : "",
"Ldu" : "",
"xmin" : 0,
"xmax" : 0,
"ymin" : 0,
"ymax" : 0
}
}]
Here is a sample of the class i made for the json object to use with gson using java
这是我为使用 java 与 gson 一起使用的 json 对象制作的类的示例
public class Response {
public Response()
{}
SpatialReference spatial;
public List<Candidates> candidate;
public class Candidates
{
public Candidates()
{}
@SerializedName("address")
public String address;
Location location;
@SerializedName("score")
public double score;
Attribute attributes;
Double getScore()
{
return score;
}
}
public class Attribute {
public Attribute()
{}
@SerializedName("Disp_Lon")
public double dispLong;
@SerializedName("Disp_Lat")
public double dispLat;
}
public class Location {
public Location()
{}
@SerializedName("x")
public double x;
@SerializedName("y")
public double y;
}
public class SpatialReference {
SpatialReference()
{}
@SerializedName("wkid")
public String wkid;
}
}
Here is the sample code using gson
这是使用 gson 的示例代码
Gson gson= new Gson()
response1= gson.fromJson(reader, Response.class);
return response1;
Any help would be appreciated and I am very new to GSON and retrieving JSON objects. Thank you very much
任何帮助将不胜感激,我对 GSON 和检索 JSON 对象非常陌生。非常感谢你
采纳答案by Programmer Bruce
I'd get rid of the inner class definitions, unless there were some very compelling reason to have them. If namespace is the goal, then at least make them static nested class definitions. This will also make them easier to deserialize into.
我会摆脱内部类定义,除非有一些非常令人信服的理由需要它们。如果名称空间是目标,那么至少使它们成为静态嵌套类定义。这也将使它们更容易反序列化。
I posted examples of deserializing into static nested classes and inner classes at http://programmerbruce.blogspot.com/2011/06/gson-v-Hymanson.html#TOC-Nested-Classes-including-Inner-Clas
我在http://programmerbruce.blogspot.com/2011/06/gson-v-Hymanson.html#TOC-Nested-Classes-include-Inner-Clas 上发布了反序列化为静态嵌套类和内部类的示例