将json转换为对应的HashMap
Convert json to corresponding HashMap
当使用 gson 将 json 转换为 Map 时,我们拥有所有值为 String 或 Boolean 的 LinkedTreeMap 实例...偶数被转换为 String...
Gson gson = new GsonBuilder().create();
Map<String, Object> result = gson.fromJson(EXAMPLE, new TypeToken<Map<String,Object>>() {}.getType());
我们如何将 json 转换为具有相应原始包装器的最简单的 HashMap?在这种情况下性能也非常重要...我想尽可能少地创建垃圾并重新使用解析器...
有没有办法使用 gson 做到这一点?或任何其他库?
请不要建议为每个 json 创建特殊的 java 类型...我宁愿通过地图导航...
这是一个例子
{ // 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 映射(或数组,如果 json 的根是数组) 然后使用一些访问器方法来访问数据...而不是为每个可能的 json 结构发明 java 类型...
适用于 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());
}
当使用 gson 将 json 转换为 Map 时,我们拥有所有值为 String 或 Boolean 的 LinkedTreeMap 实例...偶数被转换为 String...
Gson gson = new GsonBuilder().create();
Map<String, Object> result = gson.fromJson(EXAMPLE, new TypeToken<Map<String,Object>>() {}.getType());
我们如何将 json 转换为具有相应原始包装器的最简单的 HashMap?在这种情况下性能也非常重要...我想尽可能少地创建垃圾并重新使用解析器...
有没有办法使用 gson 做到这一点?或任何其他库?
请不要建议为每个 json 创建特殊的 java 类型...我宁愿通过地图导航...
这是一个例子
{ // 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 映射(或数组,如果 json 的根是数组) 然后使用一些访问器方法来访问数据...而不是为每个可能的 json 结构发明 java 类型...
适用于 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());
}