Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将json转换为相应的HashMap_Java_Json_Performance_Parsing_Gson - Fatal编程技术网

Java 将json转换为相应的HashMap

Java 将json转换为相应的HashMap,java,json,performance,parsing,gson,Java,Json,Performance,Parsing,Gson,当使用gson将json转换为Map时,我们有一个LinkedTreeMap实例,它的所有值都是String或Boolean。。。偶数转换为字符串 Gson gson = new GsonBuilder().create(); Map<String, Object> result = gson.fromJson(EXAMPLE, new TypeToken<Map<String,Object>>() {}.getType()); 目标是尽快将任何json转换

当使用gson将json转换为Map时,我们有一个LinkedTreeMap实例,它的所有值都是String或Boolean。。。偶数转换为字符串

Gson gson = new GsonBuilder().create();
Map<String, Object> result = gson.fromJson(EXAMPLE, new TypeToken<Map<String,Object>>() {}.getType());
目标是尽快将任何json转换为java映射(如果json的根是数组,则转换为数组),然后使用一些访问器方法访问数据。。。不要为每个可能的json结构发明java类型…

适用于库:

ObjectMapper mapper=new ObjectMapper();
Map 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());
    }
@测试
public void test()引发异常{
字符串jsonString=“{\“bool\”:true,”
+“\“str\”:\“strv\”,”
+“\“long\”:1000000000000}”;
ObjectMapper mapper=新的ObjectMapper();
Map Map=mapper.readValue(jsonString,Map.class);
assertEquals(Long.class,map.get(“Long”).getClass());
assertEquals(Boolean.class,map.get(“bool”).getClass());
}

您能发布一个json示例吗?我会更新问题,让您明白我的意思。。。Json可以是任何东西,主要是浮点值,我希望它是双精度的,字符串都在HashMap中(因为排序或排序在这里并不意味着什么)…任何合适的Json解析器,只要使用得当,都应该能够将其解析为映射和列表,并为原语提供适当的数据类型。至于速度,所有JSON解析器都声称“快”,因此您可能需要对您的收藏夹进行基准测试。@HotLicks例如,您如何使GSON或任何已知的LIB解析为HashMaps(表示您不关心排序或排序)?因为在我看来,大多数人认为你确实关心并使用LinkedSomething。。。它的内存效率不高,会产生大量垃圾…我现在正在考虑OpenHFT的萨克斯风项目,在那里我必须一个符号一个符号地解析…我尝试了你的代码片段,它的工作原理与Gson完全相同,只是它使用LinkedHashMap而不是LinkedTreeMap。。。所有的值都是字符串或布尔值…你确定jackson会这样做吗?也许有一种方法可以将它们配置为通过构建器或其他什么东西来实现这种行为…@Vach--也许您应该向我们展示一小段真实数据。@HotLicks不确定这是否有意义,但现在您可以再次访问@Vach-json.org并研究语法。“id”的值是一个字符串,因为它用引号括起来。是的,解析器使用的是LinkedHashMap,但这就是解析器所做的(因为许多愚蠢的JSON用户——特别是Java用户——需要它)。其他解析器不会。大多数合理使用解析器的人永远不会注意到其中的区别——找到一个不使用LinkedHashMap的解析器的唯一方法就是找到一个愚蠢的JSON用户抱怨的解析器。或者自己测试一下。
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());
    }