许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Jackson ObjectMapper使用教程

Jackson ObjectMapper使用教程

阅读数 15
点赞 0
article_banner

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

Jackson Databind


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

JackSon ObjectMapper 例子


  下边这是一个简短的Jackson ObjectMapper的例子。
 


ObjectMapper objectMapper = new ObjectMapper(); String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }"; try {    Car car = objectMapper.readValue(carJson, Car.class);    System.out.println("car.brand = " + car.brand);    System.out.println("car.doors = " + car.doors);} catch (IOException e) {    e.printStackTrace();}

    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树模型的例子。
 


String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";ObjectMapper objectMapper = new ObjectMapper();try {    JsonNode node = objectMapper.readValue(carJson, JsonNode.class);} catch (IOException e) {    e.printStackTrace();}

    正如你所见,这个JSON 字符串传递进JsonNode对象中去而不是Car对象,只是简单的把JsonNode.class作为第二个参数传递到readValue()方法中去而不是之前使用的Car.class。
  

JackSon JsonNode 类  


  一旦你把你的JSON转为一个JsonNode(或者JsonNode一个实例),你可以转化为JsonNode树模型。下边是一个JsonNode的例子,展示了如何访问JSON的字段、数组和嵌入的对象
 


String carJson =        "{ \"brand\" : \"Mercedes\", \"doors\" : 5," +        " \"owners\" : [\"John\", \"Jack\", \"Jill\"]," +        " \"nestedObject\" : { \"field\" : \"value\" } }"; ObjectMapper objectMapper = new ObjectMapper(); try {     JsonNode node = objectMapper.readValue(carJson, JsonNode.class);     JsonNode brandNode = node.get("brand");    String brand = brandNode.asText();    System.out.println("brand = " + brand);     JsonNode doorsNode = node.get("doors");    int doors = doorsNode.asInt();    System.out.println("doors = " + doors);     JsonNode array = node.get("owners");    JsonNode jsonNode = array.get(0);    String john = jsonNode.asText();    System.out.println("john = " + john);     JsonNode child = node.get("nestedObject");    JsonNode childField = child.get("field");    String field = childField.asText();    System.out.println("field = " + field); } catch (IOException e) {    e.printStackTrace();} 注意JSON字符串包含一个数组字段叫做owners,一个嵌入的对象叫做nestedObject。
  

从字符串中读取JSON


  从字符串中读取JSON是非常简单的,实际上你已经看过了,JSON字符串作为方法的第一个参数传递的,下边是另一个简单的例子。
 


ObjectMapper objectMapper = new ObjectMapper(); String carJson =    "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }"; Car car = objectMapper.readValue(carJson, Car.class);

从Reader中读取JSON


  你可以从一个Reader实例中读取JSON,下边是一个简单的实例
 


ObjectMapper objectMapper = new ObjectMapper(); String carJson =        "{ \"brand\" : \"Mercedes\", \"doors\" : 4 }";Reader reader = new StringReader(carJson); Car car = objectMapper.readValue(reader, Car.class);

从File中读取JSON


  从文件中读取JSON,同样可以通过FileReader(而不是StringReader,看前边的章节),或者File也可以,下边是一个简单的例子。
 


ObjectMapper objectMapper = new ObjectMapper(); File file = new File("data/car.json"); Car car = objectMapper.readValue(file, Car.class);

从URL中读取JSON


  从URL中读取JSON
 


ObjectMapper objectMapper = new ObjectMapper(); URL url = new URL("file:data/car.json"); Car car = objectMapper.readValue(url, Car.class);

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

从一个InputStream中读取JSON


  使用Jackson的 ObjectMapper同样可以从inputStream中读取JSON,下边是一个例子
 


ObjectMapper objectMapper = new ObjectMapper(); InputStream input = new FileInputStream("data/car.json"); Car car = objectMapper.readValue(input, Car.class);

从一个 Byte 数组中读取JSON


  Jackson支持从byte数组中读取JSON,下边是一个例子
 


ObjectMapper objectMapper = new ObjectMapper(); String carJson =        "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }"; byte[] bytes = carJson.getBytes("UTF-8"); Car car = objectMapper.readValue(bytes, Car.class);

从对象中产生JSON


  Jackson ObjectMapper同样可以用来从对象中产生JSON,你可以使用下边的方法
 


  writeValue()
 

   writeValueAsString()
 

   writeValueAsBytes()
 


  下边这是一个从Car对象产生JSON的例子
 


ObjectMapper objectMapper = new ObjectMapper(); Car car = new Car();car.brand = "BMW";car.doors = 4; objectMapper.writeValue(    new FileOutputStream("data/output-2.json"), car);

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

    这个JSON输出的结果
  
  
   {"brand":"BMW","doors":4}
  
  
   原文地址:http://tutorials.jenkov.com/java-json/jackson-objectmapper.html
  
  
  关注我,获取400个的赚钱金点子,轻松开启程序员的副业生涯


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空