我正在尝试使用Wrapper类解析特殊的JSON数据,特殊的意思是具有数字键的JSON字符串,如下所示:
{
"date":"2018-11-01",
"hours":"01-Nov 08:00",
"1011":"837.7500",
"1022":"99.92596979567664",
"1010":"3.198083",
"1021":"5",
"1019":"1171.000",
"1018":"3.578371",
"1017":"30.46989",
"1016":"0.0001931423",
"1015":"6749",
"1014":"0.161805",
"1013":"0.001678397",
"1012":"1.406077"
}
我知道如何使用包装器类解析JSON数据,但是这种情况很特殊,因为包装器类的对象名不接受数字作为String。
包装器/ POJO类
我不想使用基于JSON对象的解析。有人知道吗?
答案 0 :(得分:1)
尝试使用Gson创建包装器类
http://www.jsonschema2pojo.org/
public class Example {
@SerializedName("date")
@Expose
private String date;
@SerializedName("hours")
@Expose
private String hours;
@SerializedName("1011")
@Expose
private String _1011;
@SerializedName("1022")
@Expose
private String _1022;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getHours() {
return hours;
}
public void setHours(String hours) {
this.hours = hours;
}
public String get1011() {
return _1011;
}
public void set1011(String _1011) {
this._1011 = _1011;
}
public String get1022() {
return _1022;
}
public void set1022(String _1022) {
this._1022 = _1022;
}
答案 1 :(得分:1)
Gson库具有SerializedName
功能,在该功能中,它解析SerializeName参数中定义的键的对应值。如果您的密钥是纯整数,则事情会变得更加艰难,因为Java不允许将其用作变量名,在这种情况下,SerializeName可以使您免于头痛,并且使您的代码更易于维护。
用法示例:
@SerializedName("1011") double lat;
@SerializedName("1022") double lng;
答案 2 :(得分:0)
看看这段代码,希望它对您有用
JSONObject jsonObjectData = jsonObject1.getJSONObject("yourObject");
Iterator iterator = jsonObjectData.keys();
while (iterator.hasNext()) {
YourClass yourClass = new YourClass();
String key = (String) iterator.next();
yourClass.setKey(key);
yourClass.setVajue(jsonObjectData.getString(key));
yourList.add(yourClass);
}