我无法正确地将JSON反序列化为地图中的POJO
我连接到一个webservice,它返回一个JSON字典,其中包含任意数量的键
{
"arbitray_key_name": {
"foo_sticks": "objectName"
"bar_socks": ["A", "B"]
},
"another_key_name: {
"foo_sticks": "differentName"
"bar_socks": ["C", "D", "E"]
}
...
}
我正在使用Gson反序列化为HashMap。如果我做
HashMap<String, Object> map = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, Object>>() {}.getType());
使用上面的JsonData(明显减去......)然后我得到了我所期望的HashMap,其中包含2个项目,&#39; arbitray_key_name&#39;,&#39; another_key_name&#39;的键,其中每个值本身都是一个Map,其中包含子对象的正确键/值信息。
但是我有一个POJO类,我希望将值反序列化为
public class FooInfo {
@Key("foo_sticks")
public String fooSticks;
@Key("bar_socks")
public String[] barSocks;
}
如果我尝试做
HashMap<String, FooInfo> map = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, FooInfo>>() {}.getType());
然后我找回两个项目的HashMap,其中每个值都是FooInfo,但两个FooInfo对象中的字段都是null,Json没有被映射到对象中。我究竟做错了什么?
答案 0 :(得分:2)
我不知道你从哪里获得@Key
注释,但Gson使用@SerializedName
。
在做出改变后,我有了班级:
public class FooInfo {
@SerializedName("foo_sticks")
public String fooSticks;
@SerializedName("bar_socks")
public String[] barSocks;
@Override
public String toString() {
return "FooInfo [fooSticks=" + fooSticks + ", barSocks=" + Arrays.toString(barSocks) + "]";
}
}
然后,解析JSON:
{
"arbitray_key_name": {
"foo_sticks": "objectName",
"bar_socks": ["A", "B"]
},
"another_key_name": {
"foo_sticks": "differentName",
"bar_socks": ["C", "D", "E"]
}
}
我可以正确阅读该对象:
HashMap<String, FooInfo> map = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, FooInfo>>() {}.getType());
System.out.println(map);
获得预期的输出:
{another_key_name=FooInfo [fooSticks=differentName, barSocks=[C, D, E]], arbitray_key_name=FooInfo [fooSticks=objectName, barSocks=[A, B]]}