使用GSON解析一段含有Dictionary的json数据,只有Dictionary为null,报错'java.lang.Object java.util.Dictionary.get()

获取到的JSON数据中包含四个字段,其中有一个是Dictionary类型的数据,需要将他们解析之后再存入自定义的Model中

//自定义的Model
```java
public class ProData {
    public String id;
    public int num;
    public long time;
    public static Dictionary<String, Double> data;
}

//json数据
"[{\"id\":\"111\",\"num\":2,\"time\":1635724258528,\"data\":{\"dv1\":0.22999999999999998,\"dv2\":14.24,\"dv3\":0.05,\"dv4\":0.0,\"dv5\":0.0,\"dv6\":1.0,\"dv7\":0.006,\"dv8\":0.006,\"dv9\":0.0,\"dv10\":0.0}},
{\"id\":\"222\",\"num\":11,\"time\":1635724267526,\"data\":{\"dv1\":0.74,\"dv2\":16.44,\"dv3\":0.05,\"dv4\":0.0,\"dv5\":0.0,\"dv6\":1.0,\"dv7\":0.0785,\"dv8\":0.0785,\"dv9\":0.0,\"dv10\":0.0}}]

解析json的代码这么写的

private List<ProData> dataGsonParse(String jsonData) {
        List<ProData> dataList;
        try {
            Gson gson = new Gson();
            String str = gson.fromJson(jsonData, String.class);
            dataList = gson.fromJson(str, new TypeToken<List<ProData>>() {
            }.getType());
        } catch (Exception e) {
            dataList = null;
            e.printStackTrace();
            LogUtil.e(TAG, "dataGsonParse: json解析失败--" + e.getMessage());
        }
        return dataList;
    }

前三个字段数据解析正常,但是使用ProData.data.get("dv1")取值时报错


Attempt to invoke virtual method 'java.lang.Object java.util.Dictionary.get(java.lang.Object)' on a null object reference

debug查看也说data为null

img

请问这种问题要怎么解决 是解析方式不正确嘛?

dv1在data里啊。

data为啥是个静态变量?
而且你为什么不用Map,而是Dictionary?

Dictionary虽然是抽象映射,和map一样,但是这里的解析不适用,你的 ProData还是要根据实际改造一下

 
public class ProData {
    public String id;
    public int num;
    public long time;
    public Data data=new Data();
class Data{
double dv1;
double dv2;
double dv3;
double dv4;
double dv5;
double dv6;
double dv7;
double dv8;
double dv9;
double dv10;

}
}