gpt4 book ai didi

java - 将json转换为对应的HashMap

转载 作者:行者123 更新时间:2023-12-02 04:54:45 26 4
gpt4 key购买 nike

当使用 gson 将 json 转换为 Map 时,我们拥有 LinkedTreeMap 的实例,其所有值都是字符串或 boolean 值...甚至数字也会转换为字符串...

Gson gson = new GsonBuilder().create();
Map<String, Object> result = gson.fromJson(EXAMPLE, new TypeToken<Map<String,Object>>() {}.getType());

我们如何使用相应的原始包装器将 json 转换为最简单的 HashMap?在这种情况下,性能也非常重要...我想创建尽可能少的垃圾并重新使用解析器...

有没有办法使用 gson 来做到这一点?或任何其他库?

请不要建议为每个 json 创建特殊的 java 类型...我宁愿通过 map 导航...

这是一个例子

{                           // Hashmap (as no ordering or sorting is essential)
"bool": true, // Boolean
"string": "string", // String
"int" : 123, // Long for all non floats are ok but if possible i'd like this to be Integer if it fits, otherwise Long
"long" : 100000000000000, // Long if Integer cant contain the number...
"double" : 123.123435, // all floating point nubmers will just map to Double
"object" : { // another HashMap
...
}
"array" : [ // Array or some collection like ArrayList or LinkedList
...
]
}

目标是将任何 json 尽快转换为 java Map(如果 json 的根是数组,则转换为数组),然后使用一些访问器方法来访问数据......而不是发明 java为每个可能的 json 结构键入...

最佳答案

Jackson Databind 配合使用效果良好图书馆:

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

映射中的值将具有相应的类型。该测试通过:

    @Test
public void test() throws Exception {
String jsonString = "{\"bool\": true,"
+ "\"str\":\"strv\","
+ "\"long\": 100000000000000}";
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(jsonString , Map.class);

assertEquals(Long.class, map.get("long").getClass());
assertEquals(Boolean.class, map.get("bool").getClass());
}

关于java - 将json转换为对应的HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28898462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com