java - 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());
}
}
我希望能够类似地读取嵌套键,例如Client
和params
。我正在使用jdk11。我很喜欢使用 jackson 或 google gson,这两种方法都可以。
请帮我处理这些嵌套的 json 字符串。
解决方案
使用 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}}
推荐阅读
- rust - 返回包含引用的结果时“变量的寿命不够长”,但它的寿命确实足够长
- php - PHP doesnt want to send any emails from Hostinger hosting
- mysql - Flask SQL-Alchemy query is returning null for data that exists in my database. What could be the cause
- xml - Delete Duplicated Node From XML
- r - 一次将数据框中的所有 0 值替换为多行和多列的 1
- javascript - MDN webRTC still photo capture demo stops working recently
- r - Extract value from tibble in R markdown inline code
- java - javax.crypto.IllegalBlockSizeException:密码函数:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH
- ios - Crashed: com.twitter.crashlytics.ios.exception IOS
- java - 使用 Long 类型的对象参数对对象列表进行排序