首页 > 解决方案 > java中将Json字符串转换为hashmap的Hashmap

问题描述

我是 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 字符串(即Client.params上面的 json 字符串中没有键):

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 字符串。

标签: javajsonjava-11

解决方案


使用 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}}

推荐阅读