【发布时间】:2023-03-18 03:27:01
【问题描述】:
JSON:
{
"246": {
"test1": "one"
},
"355": {
"test2": "two"
}
}
Java POJO
class POJO{
private HashMap<String, SubPojo> subMap;
@JsonAnySetter
public void addToMap(String key, SubPojo val){ subMap.put(key, value); }
}
class SubPojo{
private HashMap<String, String> map;
@JsonAnySetter
public void addToMap(String key, String val) { map.put(key, value);}
}
在我的代码中:(使用 Jackson)
POJO testing = (new ObjectMapper()).convertValue("path/to/json", POJO.class);
我得到一个例外:
"Unrecognized field `246`..."
我哪里错了?
【问题讨论】:
-
POJO有一个字段subMap但没有246。因此,您需要告诉对象映射器每个未知字段都应该作为subMap的键而不是实际属性来处理。如何完成取决于您使用的 json 库。顺便说一句,你需要为SubPojo做同样的事情。 -
@Thomas,我正在使用 JackSon,你能在这里指导我吗?
-
基本上你需要使用注解
@JsonAnySetter(如果你想序列化为json,@JsonAnyGetter)。 -
或者,不要定义任何类并解析为
Map<String, Map<String, String>>,但您必须使用TypeReference来防止丢失泛型类型参数。 -
请注意,如果您的所有对象基本上都是地图,您也可以通过
ObjectMapper.readTree(json)将该 json 解析为地图或通用树格式。