我有这个 json,因此我需要使用 Jackson 获取货币物件串列(物件本身有一个货币名称栏位 - “USD”、“type”和“show”)。我怎样才能以简单明了的方式做到这一点?
欢迎任何帮助
{
...
"result": "OK",
"currency": {
"currencies": {
"LB": {
"type": "A",
"setting": {
"show": true,
},
"access" : true
},
"USD": {
"type": "B",
"setting": {
"show": true,
},
"access" : true
},
"RUB": {
"type": "A",
"setting": {
"show": true,
},
"access" : true
},
....
// and more..
},
...
}
}
uj5u.com热心网友回复:
"currencies": {
"LB": {
"type": "A",
"setting": {
"show": true,
},
"access" : true
},
"USD": {
"type": "B",
"setting": {
"show": true,
},
"access" : true
},
"RUB": {
"type": "A",
"setting": {
"show": true,
},
"access" : true
},
....
// and more..
},
...
这看起来像一个地图,而不是一个串列。这对你有帮助吗?因此,您需要创建Currency
类并让 jackson 将此结构决议为 Map<String, Currency>。请注意,货币不会包含识别符号(如“USD”),只有它们在地图中键入才会包含。
uj5u.com热心网友回复:
您可以将 Json 读取为 Map<String, Object>。获得地图后,您可以遍历地图并构建串列。如果您想从 Json 反序列化(读取)到您的自定义物件串列,您需要将您的 Json 重组为 Json 串列而不是 Json 物件。然后您可以直接将您的 Json 读入串列。
无论如何,有一个开源库,它具有基于 Jackson 库的功能,真正简化了从 Json 读取/写入物件的程序。如果你有一个 json 字符串,你所要做的就是:
Map<String, Object> map = JsonUtils.readObjectFromJsonString(jsonString, Map.class);
但它会抛出 IOException,因此您需要处理它。这是Javadoc。该库称为 MgntUtils,可以在Maven 工件和Github 上找到(包括 javadoc 和源代码)
uj5u.com热心网友回复:
我能够将物件保存添加到串列中,但是以一种相当不方便的方式,在我看来......
ArrayList<Dto> currencyObjectList = new ArrayList<Dto>();
CurrencyStaticDto obj = null;
JsonNode currencies = mapper.readTree(response.getBody()).get("currencies");
Iterator<Map.Entry<String, JsonNode>> fields = currencies.fields();
while(fields.hasNext()) {
Map.Entry<String, JsonNode> field = fields.next();
String fieldName = field.getKey();
JsonNode fieldValue = field.getValue();
obj = mapper.readValue(fieldValue.toString(),CurrencyStaticDto.class);
obj.setCurrency(fieldName);
currencyObjectList.add(obj);
}
0 评论