我有这个 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 评论