【问题标题】:Convert Json string into Hashmap of hashmap in javajava中将Json字符串转换为hashmap的Hashmap
【发布时间】:2020-09-27 19:28:01
【问题描述】:

我是json处理的新手,下面是客户发给我们的json字符串,我想 将这个 json 字符串读入 hasmap 的 hashmap,这样即使是下面的“Client”/“params”键 我可以访问它的键和值集并处理它们。

var incomingMessage = 

"{  
    \"dev1\":\"NULL\",  
    \"devkp2\":\"val\",     
    \"compression\":\"NULL\",
    \"subcode\":\"P_CODE\",
    \"code\":\"PEB_USER\",
    \"Client\":{
                \"first_name\":\"Perf FN 422677\",
                \"client_last_name\":\"DP_PSL\",
                \"clientid\":\"780A832\",
                \"email\":\"DP_PS@airb.com\"
                },
    \"clientsrc\":\"dev.client.notvalid\",
    \"params\":{
                \"Name\":\"ABC_PR\",
                \"client_ID\":\"PSL\",
                \"domain\":\"airb.com\"
                }
}"

这是我当前的代码,它适用于非嵌套的 json 字符串(即上面的 json 字符串中没有 Client.params 键):

public static void convertJsonStringToMap(String incomingMessage) {

    HashMap<Object, Object> map = new HashMap<Object, Object>();
    JSONObject jObject = new JSONObject(incomingMessage);
    Iterator<?> keys = jObject.keys();
    while (keys.hasNext()) {
        String key = (String) keys.next();
        String value = jObject.getString(key);
        map.put(key, value);

    }
    for (Map.Entry<Object, Object> entry : map.entrySet()) {
        System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

    }
}

我希望能够类似地读取嵌套键,例如 Clientparams。我正在使用jdk11。我可以使用 jackson 或 google gson,这两种方法都可以。

请帮我处理这些嵌套的 json 字符串。

【问题讨论】:

  • 您可以使用递归,但只要您的内部对象具有相同的key 并将其添加到 hasmap,它就会失败。

标签: java json java-11


【解决方案1】:

使用 Jackson ObjectMapper 可以轻松地将有效的 JSON 字符串转换为 Map。

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> parsedMap = mapper.readValue(incomingMessage, Map.class);

它也适用于嵌套元素 -

public static void main(String[] args) throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    String someJsonString = "{" +
            "\"A\":\"1\"," +
            "\"B\":2," +
            "\"C\":" +
                "{" +
                "\"D\":\"4\"" +
                "}" +
            "}";

    Map<String, Object> outputMap = mapper.readValue(someJsonString, Map.class);
    System.out.println(outputMap);
}

输出:

{A=1, B=2, C={D=4}}

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 2011-02-02
    • 2021-01-13
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2020-07-26
    • 2014-09-04
    相关资源
    最近更新 更多