用于实现映射和列表的JSON值的Java包装器类

用于实现映射和列表的JSON值的Java包装器类,java,json,jackson,Java,Json,Jackson,是否有一个常用的库具有用于以类型安全方式表示json的类?我正在寻找一个json对象存储在映射中,json数组存储在列表中的映射 我想做的是这样的: myJson.get("myInt").asInt(); myJson.get("myString").asString(); .get()应返回缺少的节点对象,因此不需要进行空检查 Jackson是一个非常好的库,可以完成所有这些,但是Jackson JsonObject和JsonArray类没有实现映射和列表。您必须将JSON转换为所需的类型

是否有一个常用的库具有用于以类型安全方式表示json的类?我正在寻找一个json对象存储在映射中,json数组存储在列表中的映射

我想做的是这样的:

myJson.get("myInt").asInt();
myJson.get("myString").asString();
.get()
应返回缺少的节点对象,因此不需要进行空检查


Jackson是一个非常好的库,可以完成所有这些,但是Jackson JsonObject和JsonArray类没有实现映射和列表。

您必须将JSON转换为所需的类型。下面的示例将其转换为
映射
。如果无法转换,它将抛出异常

public class JsonMapExample {
    public static void main(String[] args) {

        String json = "{\"name\":\"mkyong\", \"age\":\"29\"}";

        Map<String,String> map = new HashMap<String,String>();
        ObjectMapper mapper = new ObjectMapper();

        try {       
            map = mapper.readValue(json, new TypeReference<HashMap<String,String>>(){});

        } catch (JsonMappingException e) {
            e.printStackTrace();
        }
    }
}
public类JsonMapExample{
公共静态void main(字符串[]args){
字符串json=“{\'name\':\'mkyong\',\'age\':\'29\'”;
Map Map=newhashmap();
ObjectMapper mapper=新的ObjectMapper();
试试{
map=mapper.readValue(json,newTypeReference(){});
}捕获(JsonMappingException e){
e、 printStackTrace();
}
}
}
这通常是通过网络发送序列化对象时发生的情况,编组时会丢失类型安全性,并通过解组将其重新添加到另一端

见:


JSON不是类型安全的,您必须将其转换为您想要的任何类型。Java的几个JSON工具包都有用于对象和数组的JSONObject和JSONArray类。但是,如果您不知道JSON的布局,当然需要在请求之前查询该类型。请查看,例如,at或可能是JSON.simple,因为它直接使用映射和列表:不回答问题。@ccleve请更详细地说明它如何不回答问题。我认为这是不可能的。我的观点是,没有办法使JsonObject或JsonArray成为类型安全的,JSON是字符串序列化,因此本质上不属于类型安全,您可以通过编组到类型安全的类来解决它。顺便说一下,询问库建议是结束问题的原因之一,我将向您展示如何使用您提到的库添加类型安全性。这是非常可能的。如果Jackson对象实现了Map和List接口,它们将满足标准。杰克逊也是类型安全的。如果调用node.asInt()或asText(),而该节点的类型不正确,它将为您执行转换。它还通过返回一个MissingNode来处理空值。它们可以实现Map/List接口,但我不知道这如何帮助您获得类型安全性,它们将是映射/列表,您需要从itMap Map中强制转换任何内容;Node=map.get(“foo”);String str=node.asString()。