当前位置: 首页 > 面试题库 >

Jackson-递归解析到Map

孟光耀
2023-03-14
问题内容

我试图简化我的代码:我想存储键和值(所有字符串)。

我实际上是使用A Map<String, Object>来存储它。hat方法Object可以是值(String)或新节点(Map<String, Object>)。

如何简化此代码?递归函数会很好。

try {
    JsonParser jsonParser = new JsonFactory().createJsonParser(content);

    jsonParser.nextToken();
    while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
        jsonParser.nextToken();

        if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
            while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
                String key = jsonParser.getCurrentName();
                jsonParser.nextToken();

                if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
                    mData.put(key, new HashMap<String, Object>());
                    while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
                        String subkey = jsonParser.getCurrentName();
                        jsonParser.nextToken();

                        if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
                            Map<String, Object> subdata = (Map<String, Object>) mData.get(key);
                            subdata.put(subkey, new HashMap<String, Object>());
                            while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
                                String subsubkey = jsonParser.getCurrentName();
                                jsonParser.nextToken();
                                Map<String, Object> subsubdata = (Map<String, Object>) subdata.get(subkey);
                                LogHelper.d("data[" + key + "][" + subkey + "][" + subsubkey + "]=" + jsonParser.getText());
                                subsubdata.put(subsubkey, jsonParser.getText());
                            }
                        }
                        else {
                            LogHelper.d("data[" + key + "]=" + jsonParser.getText());
                            mData.put(key, jsonParser.getText());
                        }
                    }
                }
                else {
                    LogHelper.d("data[" + key + "]=" + jsonParser.getText());
                    mData.put(key, jsonParser.getText());
                }
            }
        }
        else {
            LogHelper.d("status=" + jsonParser.getText());
            mStatus = jsonParser.getText();
        }
    }
}
catch (IllegalArgumentException e) {
    error("0", "IllegalArgumentException: " + e.getMessage());
}
catch (JsonParseException e) {
    error("0", "IOException: " + e.getMessage());
}
catch (IOException e) {
    error("0", "IOException: " + e.getMessage());
}

问题答案:

假设您的最终目标只是将JSON反序列化为Map<String, Object>,那么使用Jackson可以简单得多。使用ObjectMapper

final String json = "{}";
final ObjectMapper mapper = new ObjectMapper();
final MapType type = mapper.getTypeFactory().constructMapType(
    Map.class, String.class, Object.class);
final Map<String, Object> data = mapper.readValue(json, type);

您将需要错误处理等,但这是一个很好的起点。



 类似资料:
  • 我试图简化我的代码:我想存储键和值(所有字符串)。 我实际上在使用

  • 我用一个递归函数尝试过它,它迭代语句,当语句不是文字时,它会跟随对象到达下一个节点。像这样: 但不知怎的,我用这个方法没有什么进展。非常感谢你的每一次洞察。

  • 问题内容: 我从REST服务返回以下JSON响应。现在,我需要将以下JSON响应反序列化为POJO。我正在与杰克逊合作。 在上面的json中,是一个可以具有多个json对象的JSON数组。现在也是JSON数组。现在棘手的部分是,我可以在每个类别对象中拥有多个级别,并且我不知道我将拥有多少个级别。给定以上JSON,我需要提取每个类别和last的内容。所以应该是这样的: 其中是类别的taskId,是l

  • 本文向大家介绍js使用递归解析xml,包括了js使用递归解析xml的使用技巧和注意事项,需要的朋友参考一下 xml结构: 解析方法: 以上就是javascript使用递归解析XML的全部代码了,超级简洁,非常使用,给需要的小伙伴参考下。

  • 我在解析名为“test.XML”的XML文件时遇到如下问题: 我想得到这样的结构:[[[[un]],[[deux,trois,quatre],[[cinq,six,sept],[huit,noeuf],[dix,onze]],但我得到了这个[[[cinq,six,sept],[[huit,noeuf],[[dix,onze],[[deux,trois,quatre]] 这是我的代码:

  • 我有一个任务解析Json到Java类。 我试图解析的Json片段有点像树结构。 这里的关键点是,参数值可以是字符串,也可以是参数名称/值对的另一个数组; 我想用杰克逊地图绘制器 这里的问题是我不知道如何在这里描述响应类,所以它可以被杰克逊自动解析。如果有可能的话。 Json: