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 使用Jackson创建简单的对象,如JSON.org_Java_Json_Jackson - Fatal编程技术网

Java 使用Jackson创建简单的对象,如JSON.org

Java 使用Jackson创建简单的对象,如JSON.org,java,json,jackson,Java,Json,Jackson,我想使用Jackson创建简单的JSON对象,在这里我不需要为每个响应构建自定义类,而是一个类似于下面代码的预制对象。其他JSON库(android、JSON.org、GSON)可以执行类似的操作 JsonObject myObject = new JsonObject("{\"a\":1}"); myObject.getInt("a"); // returns 1 我在杰克逊的包裹里似乎找不到类似的手术PS:我知道我可以创建一个java类来封装这个特定的JSON字符串,但我要寻找的是一种创建

我想使用Jackson创建简单的JSON对象,在这里我不需要为每个响应构建自定义类,而是一个类似于下面代码的预制对象。其他JSON库(android、JSON.org、GSON)可以执行类似的操作

JsonObject myObject = new JsonObject("{\"a\":1}");
myObject.getInt("a"); // returns 1
我在杰克逊的包裹里似乎找不到类似的手术PS:我知道我可以创建一个java类来封装这个特定的JSON字符串,但我要寻找的是一种创建通用JSON对象的方法,我不需要将其解析为我定义的类。在互联网上我似乎找不到任何类似的东西。我有一种感觉,这超出了杰克逊的范围,他们不支持这样的行动。如果是这样的话,就这么说吧,我将结束这个问题

我的目标是在我的项目中没有另一个Json库


编辑2014:我发现您可以使用类
org.codehaus.jackson.node.ObjectNode
来保存您的对象,并允许您执行问题中所述的操作

下面是一个代码示例:

ObjectMapper mapper = new ObjectMapper();
ObjectNode myObject = (ObjectNode) mapper.readTree("{\"a\":1}");
System.out.println(myObject.get("a").asInt()); // prints 1

在我看来,您需要一张
地图
。如果您有一个简单的JSON结构,那么您可以像这样使用
Map

String json = "{\"name\":\"mkyong\", \"age\":\"29\"}";
Map<String,String> map = new HashMap<String,String>();
ObjectMapper mapper = new ObjectMapper();
try { 
    //convert JSON string to Map
    map = mapper.readValue(json, 
        new TypeReference<HashMap<String,String>>(){});
    System.out.println(map);
} catch (Exception e) {
    e.printStackTrace();
}
String json=“{\'name\':\'mkyong\',\'age\':\'29\'”;
Map Map=newhashmap();
ObjectMapper mapper=新的ObjectMapper();
试试{
//将JSON字符串转换为映射
map=mapper.readValue(json,
新类型引用(){});
系统输出打印项次(map);
}捕获(例外e){
e、 printStackTrace();
}
如果您有一个更复杂的JSON结构,其中包含嵌套的对象等等,那么您可以使用
映射

ObjectMapper mapper=new ObjectMapper();
//从文件中读取JSON
Map=mapper.readValue(
新文件(“c:\\user.json”),
新类型引用(){
});
System.out.println(map.get(“name”);
System.out.println(map.get(“age”));
@抑制警告(“未选中”)
ArrayList=(ArrayList)map.get(“消息”);

从曾经有用的地图中选取的示例。

在我看来,你想要一张
地图
——下面是一张地图。Java是一种类型安全语言,您不能像javaScript中那样拥有动态对象。另外,请看一下关于
ObjectNode
@BoristheSpider的建议,谢谢您的建议。不过,我刚刚针对更动态的对象(如{myProp:2,nestedObject:{innerValue:1,innerValue:2})测试了该示例,并得到了错误(因空格而遗漏)。查看了您发送的第二个链接,似乎无法将字符串解析到其中。在发布此帖子之前,我正在查看该类和该软件包中的其他类,但什么也没有得到。@Boristeider哎哟……在查看mykongs博客*facepalm上的所有解决方案之前,我很快就发布到了。介意发布一个答案吗?哈,新手错误或者.Done.@ug_u在第2行中,您不需要将结果强制转换为ObjectNode,JsonNode就足够了。
ObjectMapper mapper = new ObjectMapper();
// read JSON from a file
Map<String, Object> map = mapper.readValue(
    new File("c:\\user.json"),
    new TypeReference<Map<String, Object>>() {
});
System.out.println(map.get("name"));
System.out.println(map.get("age"));
@SuppressWarnings("unchecked")
ArrayList<String> list = (ArrayList<String>) map.get("messages");