拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用Jackson,如何从有趣的json中获取物件串列?

使用Jackson,如何从有趣的json中获取物件串列?

白鹭 - 2022-03-08 2082 0 0

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

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *