【发布时间】: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());
}
}
我希望能够类似地读取嵌套键,例如 Client 和 params。我正在使用jdk11。我可以使用 jackson 或 google gson,这两种方法都可以。
请帮我处理这些嵌套的 json 字符串。
【问题讨论】:
-
您可以使用递归,但只要您的内部对象具有相同的
key并将其添加到 hasmap,它就会失败。