使用包装器类解析JSON数据,其中String的对象/键名称为数字

时间:2018-12-07 11:19:10

标签: java android json parsing

我正在尝试使用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类

enter image description here

我不想使用基于JSON对象的解析。有人知道吗?

3 个答案:

答案 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);
                        }