jackson-objectMapper

今天看jodis代码,发现objectmapper 查了下

使用Jackson转换JSON最简单的方式是通过Jackson的 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)。Jackson的ObjectMapper可以从String,Stream或者文件。并创建一个表示已分析的JSON对象图。

Jackson Databind

这个ObjectMapper在JackSon DataBind项目中,所以你需要在你的项目的路径下安装它,关于安装的教程你可以看这篇文章

JackSon ObjectMapper 例子

下边这是一个简短的Jackson ObjectMapper的例子。
[java]  view plain  copy
  1. ObjectMapper objectMapper = new ObjectMapper();  
  2.   
  3. String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";  
  4.   
  5. try {  
  6.     Car car = objectMapper.readValue(carJson, Car.class);  
  7.     System.out.println("car.brand = " + car.brand);  
  8.     System.out.println("car.doors = " + car.doors);  
  9. catch (IOException e) {  
  10.     e.printStackTrace();  
  11. }  

Car类是我创建的,正如你看到的,car.class是readValue()方法的第二个参数,方法的第一个参数是JSON的源(String,Stream或者文件)

Jackson Annotations

JackSon中包含了一系列的注解,通过他们你可以修改JackSon读和写JSON与java对象的相互的转换,Jackson的注解在我的文章 Jackson annotation tutorial中进行了解释。

Jackson JSONTree Model

JackSon有一个内嵌的模型可以代表一个JSON对象。如果你不知道JSON将要接收的是什么样的,或者你不能创建一个对象代表的时候,使用 tree model 就很有用了。这个Jackson树模型由JsonNode类代表,你可以使用Jackson的ObjectMapper来把JSON转成JsonNode树模型,就像你在自己的类上做的一样。
Jackson 树模型例子
下边是一个简单的JackSon树模型的例子。
[java]  view plain  copy
  1. String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";  
  2. ObjectMapper objectMapper = new ObjectMapper();  
  3. try {  
  4.     JsonNode node = objectMapper.readValue(carJson, JsonNode.class);  
  5. catch (IOException e) {  
  6.     e.printStackTrace();  
  7. }  

正如你所见,这个JSON 字符串传递进JsonNode对象中去而不是Car对象,只是简单的把JsonNode.class作为第二个参数传递到readValue()方法中去而不是之前使用的Car.class。
JackSon JsonNode 类
一旦你把你的JSON转为一个JsonNode(或者JsonNode一个实例),你可以转化为JsonNode树模型。下边是一个JsonNode的例子,展示了如何访问JSON的字段、数组和嵌入的对象
[java]  view plain  copy
  1. String carJson =  
  2.         "{ \"brand\" : \"Mercedes\", \"doors\" : 5," +  
  3.         "  \"owners\" : [\"John\", \"Jack\", \"Jill\"]," +  
  4.         "  \"nestedObject\" : { \"field\" : \"value\" } }";  
  5.   
  6. ObjectMapper objectMapper = new ObjectMapper();  
  7.   
  8. try {  
  9.   
  10.     JsonNode node = objectMapper.readValue(carJson, JsonNode.class);  
  11.   
  12.     JsonNode brandNode = node.get("brand");  
  13.     String brand = brandNode.asText();  
  14.     System.out.println("brand = " + brand);  
  15.   
  16.     JsonNode doorsNode = node.get("doors");  
  17.     int doors = doorsNode.asInt();  
  18.     System.out.println("doors = " + doors);  
  19.   
  20.     JsonNode array = node.get("owners");  
  21.     JsonNode jsonNode = array.get(0);  
  22.     String john = jsonNode.asText();  
  23.     System.out.println("john  = " + john);  
  24.   
  25.     JsonNode child = node.get("nestedObject");  
  26.     JsonNode childField = child.get("field");  
  27.     String field = childField.asText();  
  28.     System.out.println("field = " + field);  
  29.   
  30. catch (IOException e) {  
  31.     e.printStackTrace();  
  32. }  
注意JSON字符串包含一个数组字段叫做owners,一个嵌入的对象叫做nestedObject。

从字符串中读取JSON

从字符串中读取JSON是非常简单的,实际上你已经看过了,JSON字符串作为方法的第一个参数传递的,下边是另一个简单的例子。
[java]  view plain  copy
  1. ObjectMapper objectMapper = new ObjectMapper();  
  2.   
  3. String carJson =  
  4.     "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";  
  5.   
  6. Car car = objectMapper.readValue(carJson, Car.class);  

从Reader中读取JSON

你可以从一个Reader实例中读取JSON,下边是一个简单的实例
[java]  view plain  copy
  1. ObjectMapper objectMapper = new ObjectMapper();  
  2.   
  3. String carJson =  
  4.         "{ \"brand\" : \"Mercedes\", \"doors\" : 4 }";  
  5. Reader reader = new StringReader(carJson);  
  6.   
  7. Car car = objectMapper.readValue(reader, Car.class);  

从File中读取JSON

从文件中读取JSON,同样可以通过FileReader(而不是StringReader,看前边的章节),或者File也可以,下边是一个简单的例子。
[java]  view plain  copy
  1. ObjectMapper objectMapper = new ObjectMapper();  
  2.   
  3. File file = new File("data/car.json");  
  4.   
  5. Car car = objectMapper.readValue(file, Car.class);  

从URL中读取JSON

从URL中读取JSON
[java]  view plain  copy
  1. ObjectMapper objectMapper = new ObjectMapper();  
  2.   
  3. URL url = new URL("file:data/car.json");  
  4.   
  5. Car car = objectMapper.readValue(url, Car.class);  

这是一个使用文件路径的例子,你同样可以使HTTP ULR

从一个InputStream中读取JSON

使用Jackson的 ObjectMapper同样可以从inputStream中读取JSON,下边是一个例子
[java]  view plain  copy
  1. ObjectMapper objectMapper = new ObjectMapper();  
  2.   
  3. InputStream input = new FileInputStream("data/car.json");  
  4.   
  5. Car car = objectMapper.readValue(input, Car.class);  

从一个Byte数组中读取JSON

Jackson支持从byte数组中读取JSON,下边是一个例子
[java]  view plain  copy
  1. ObjectMapper objectMapper = new ObjectMapper();  
  2.   
  3. String carJson =  
  4.         "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";  
  5.   
  6. byte[] bytes = carJson.getBytes("UTF-8");  
  7.   
  8. Car car = objectMapper.readValue(bytes, Car.class);  

从对象中产生JSON

Jackson ObjectMapper同样可以用来从对象中产生JSON,你可以使用下边的方法
writeValue()
writeValueAsString()
writeValueAsBytes()
下边这是一个从Car对象产生JSON的例子
[java]  view plain  copy
  1. ObjectMapper objectMapper = new ObjectMapper();  
  2.   
  3. Car car = new Car();  
  4. car.brand = "BMW";  
  5. car.doors = 4;  
  6.   
  7. objectMapper.writeValue(  
  8.     new FileOutputStream("data/output-2.json"), car);  

这个例子首先创建了一个ObjectMapper,然后一个Car实例,最后调用了ObjectMapper的writeValue方法,这个方法可以将Car对象转为JSON并且写入到给定的FileOutputStream中去。这个ObjectMapper的另两个方法同样可以从对象中产生JSON,并以字符串或者byte数组返回,下边是一个例子
[java]  view plain  copy
  1. ObjectMapper objectMapper = new ObjectMapper();  
  2.   
  3. Car car = new Car();  
  4. car.brand = "BMW";  
  5. car.doors = 4;  
  6.   
  7. String json = objectMapper.writeValueAsString(car);  
  8. System.out.println(json);  

这个JSON输出的结果
{"brand":"BMW","doors":4}
原文地址:http://tutorials.jenkov.com/java-json/jackson-objectmapper.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值