一,Jackson使用示例

第1步:创建ObjectMapper对象。

创建ObjectMapper对象。它是一个可重复使用的对象。

ObjectMapper mapper = new ObjectMapper();

第2步:反序列化JSON到对象。

从JSON对象使用readValue()方法来获取。通过JSON字符串和对象类型作为参数JSON字符串/来源。

//Object to JSON Conversion
Student student = mapper.readValue(jsonString, Student.class);

第3步:序列化对象到JSON。

使用writeValueAsString()方法来获取对象的JSON字符串表示。

//Object to JSON Conversion
jsonString = mapper.writeValueAsString(student);

在这个例子中,我们创建一个Student类。将创建一个JSON字符串学生的详细信息,并将其反序列化到学生的对象,然后将其序列化到JSON字符串。

    public static void main(String args[]) throws JsonParseException, JsonMappingException, IOException {// 第1步:创建ObjectMapper对象。// 创建ObjectMapper对象。它是一个可重复使用的对象。ObjectMapper mapper = new ObjectMapper();String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";// 第2步:反序列化JSON到对象。// 从JSON对象使用readValue()方法来获取。通过JSON字符串和对象类型作为参数JSON字符串/来源。//map json to studentStudent student = mapper.readValue(jsonString, Student.class);System.out.println(student);// 第3步:序列化对象到JSON。// 使用writeValueAsString()方法来获取对象的JSON字符串表示。jsonString = mapper.writeValueAsString(student);System.out.println(jsonString);}

public class Student {private String name;private int age;public Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String toString() {return "Student [ name: " + name + ", age: " + age + " ]";}
}

二,Jackson数据绑定

数据绑定API用于JSON转换和使用属性访问或使用注解POJO(普通Java对象)。以下是它的两个类型。

  • 简单数据绑定 - 转换JSON,从Java Maps, Lists, Strings, Numbers, Booleans 和 null 对象。

  • 完整数据绑定 - 转换JSON到任何JAVA类型。

ObjectMapper读/写JSON两种类型的数据绑定。数据绑定是最方便的方式是类似XML的JAXB解析器。

简单的数据绑定

简单的数据绑定是指JSON映射到Java核心数据类型。下表列出了JSON类型和Java类型之间的关系。

Sr. No. JSON 类型 Java 类型
1 object LinkedHashMap<String,Object>
2 array ArrayList<Object>
3 string String
4 complete number Integer, Long or BigInteger
5 fractional number Double / BigDecimal
6 true | false Boolean
7 null null
public static void main(String args[]) throws JsonGenerationException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();Map<String, Object> studentDataMap = new HashMap<String, Object>();int[] marks = { 1, 2, 3 };Student student = new Student();student.setAge(10);student.setName("Mahesh");// JAVA ObjectstudentDataMap.put("student", student);// JAVA StringstudentDataMap.put("name", "Mahesh Kumar");// JAVA BooleanstudentDataMap.put("verified", Boolean.FALSE);// ArraystudentDataMap.put("marks", marks);mapper.writeValue(new File("student3.json"), studentDataMap);//result student.json//{ //   "student":{"name":"Mahesh","age":10},//   "marks":[1,2,3],//   "verified":false,//   "name":"Mahesh Kumar"//}studentDataMap = mapper.readValue(new File("student3.json"), Map.class);System.out.println(studentDataMap.get("student"));System.out.println(studentDataMap.get("name"));System.out.println(studentDataMap.get("verified"));System.out.println(studentDataMap.get("marks"));}

完整数据绑定

如最上面的例子的第2步

        // 第2步:反序列化JSON到对象。// 从JSON对象使用readValue()方法来获取。通过JSON字符串和对象类型作为参数JSON字符串/来源。//map json to studentStudent student = mapper.readValue(jsonString, Student.class);System.out.println(student);

三,Jackson树模型

树模型准备JSON文件的内存树表示。 ObjectMapper构建JsonNode节点树。这是最灵活的方法。它类似于DOM解析器的XML。

从JSON创建树

public static void main(String args[]) throws JsonProcessingException, IOException {ObjectMapper mapper = new ObjectMapper();String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";// 从JSON创建树JsonNode rootNode = mapper.readTree(jsonString);// 使用相对路径来根节点在遍历树,并处理该数据得到的每个节点。考虑下面的代码片段遍历提供的根节点的树。JsonNode nameNode = rootNode.path("name");System.out.println("Name: " + nameNode.textValue());JsonNode ageNode = rootNode.path("age");System.out.println("Age: " + ageNode.intValue());JsonNode verifiedNode = rootNode.path("verified");System.out.println("Verified: " + (verifiedNode.booleanValue() ? "Yes" : "No"));JsonNode marksNode = rootNode.path("marks");Iterator<JsonNode> iterator = marksNode.elements();System.out.print("Marks: [ ");while (iterator.hasNext()) {JsonNode marks = iterator.next();System.out.print(marks.intValue() + " ");}System.out.println("]");}

树到Java对象转换

    public static void main(String args[]) throws JsonGenerationException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";// 从JSON创建树JsonNode rootNode = mapper.readTree(jsonString);Student student = mapper.treeToValue(rootNode, Student.class);System.out.println(student);}

四,Jackson流式API

流式API读取和写入JSON内容离散事件。 JsonParser读取数据,而JsonGenerator写入数据。它是三者中最有效的方法,是最低开销和最快的读/写操作。它类似于XML的Stax解析器。

  • JsonGenerator - 写入JSON字符串。

  • JsonParser - 解析JSON字符串。

使用JsonGenerator写入JSON

使用JsonGenerator是非常简单的。首先使用JsonFactory.createJsonGenerator()方法创建一个JsonGenerator,并用write***()方法来写每一个JSON值。

JsonFactory jasonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jasonFactory.createJsonGenerator(new File("student.json"), JsonEncoding.UTF8);
jsonGenerator.writeStartObject();
// "name" : "Mahesh Kumar"
jsonGenerator.writeStringField("name", "Mahesh Kumar");


使用JsonParser 读取JSON

使用JsonParser是非常简单的。首先使用JsonFactory.createJsonParser()方法创建JsonParser,并使用它的nextToken()方法来读取每个JSON字符串作为标记。检查每个令牌和相应的过程。

JsonFactory jasonFactory = new JsonFactory();
JJsonParser jsonParser = jasonFactory.createJsonParser(new File("student.json"));
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {//get the current tokenString fieldname = jsonParser.getCurrentName();if ("name".equals(fieldname)) {//move to next token
      jsonParser.nextToken();System.out.println(jsonParser.getText());             }
}

 附录:

  反序列化JSON到list。

  ObjectMapper mapper = new ObjectMapper();List<Budget> budgets = mapper.readValue(jsonString, new TypeReference<List<Budget>>() { });

  实例:

package com.xc.json.JackSon;import java.util.Iterator;
import java.util.List;
import java.util.Map;import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;public class JackSon {public static void main(String[] args) throws Exception {String json = "{\"username\":\"zhangsan\",\"性别\":\"男\",\"company\":{\"companyName\":\"中华\",\"address\":\"北京\"},\"cars\":[\"蔚蓝\",\"特斯拉\"],\"logList\":[{\"id\":123,\"name\":\"abc\"},{\"id\":234,\"name\":\"efff\"}]}";System.out.println(json);ObjectMapper mapper = new ObjectMapper();JsonNode rootNode = mapper.readTree(json);// String的处理JsonNode usernameNode = rootNode.path("username");System.out.println("==username==");String textValue = usernameNode.textValue();System.out.println("textValue:" + textValue);String asText = usernameNode.asText();System.out.println("asText:" + asText);String username = mapper.writeValueAsString(usernameNode);System.out.println("username:" + username);// 转换成类型,Map类型,同样Integer,String,List,也可以同样处理JsonNode companyNode = rootNode.path("company");String company = mapper.writeValueAsString(companyNode);Map<String, Object> companyMap = mapper.readValue(company, Map.class);System.out.println("==company==");System.out.println(companyMap);// 数组的处理JsonNode carsNode = rootNode.path("cars");System.out.println("==cars==");Iterator<JsonNode> iterator = carsNode.elements();System.out.print("cars: [ ");while (iterator.hasNext()) {JsonNode marks = iterator.next();System.out.print(marks.textValue() + " ");}System.out.println("]");// 转换成List<Log>,类型JsonNode logListNode = rootNode.path("logList");String logJson = mapper.writeValueAsString(logListNode);JavaType logType = mapper.getTypeFactory().constructParametricType(List.class, Log.class);List<Log> logList = mapper.readValue(logJson, logType);System.out.println("==logList==");System.out.println(logList);}
}

package com.xc.json.JackSon;class Log {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "log [id=" + id + ", name=" + name + "]";}}

jackson-api:

http://tool.oschina.net/apidocs/apidoc?api=jackson-1.9.9


转载于:https://www.cnblogs.com/ooo0/p/9091840.html

jackson json转对象 对象转json相关推荐

  1. Jackson:数组json字符串转对象集合(List)的两种方式

    首先,创建个实体类Person import java.util.List;public class Person {private String name;private Integer age;p ...

  2. 总结的一些json格式和对象/String/Map/List等的互转工具类

    总结的一些json格式和对象/String/Map/List等的互转工具类,有需要的可以看看,需要引入jackson-core-asl-1.7.1.jar.jackson-jaxrs-1.7.1.ja ...

  3. Spring Boot整合Spring Data Redis-存取JSON格式Java对象

    如何通过Spring Data Redis,以JSON格式来存储我们的实体对象,其实上节课我们讲了基于JDK的序列化器,来帮助我们做一个序列化,做一个对象的存储,那么这种方式需要注意一点的是,如果我们 ...

  4. 把对象转换成JSON字符串 第二稿支持移动设备

    /*** 导入jackson包 把对象转换成JSON字符串 第二稿 支持移动设备* @param pn* @param request* @return*/@RequestMapping(value ...

  5. Json字符串和对象相互转换

    文章目录 1.JsonUtil 工具类 把对象转换为json字符串 把json字符串转换为对象 把json字符串转换为List集合 2.Gson 把对象转换为json字符串 把json字符串转换为对象 ...

  6. JSON字符串和对象之间的转换

    使用jackSON来实现JSON字符串和对象之间的转换 引入maven <!--jackson--><dependency><groupId>com.fasterx ...

  7. java xml收文转对象_Springmvc发送json数据转Java对象接收

    1.导包 基于maven com.fasterxml.jackson.core jackson-databind 2.9.0 com.fasterxml.jackson.core jackson-co ...

  8. 解决json字符串转为对象时LocalDateTime异常问题

    1 出现异常 这次的异常出现在前端向后端发送请求体里带了两个日期,在后端的实体类中,这两个日期的格式都是JDK8中的时间类LocalDateTime.默认情况下,LocalDateTime只能解析20 ...

  9. java对象转json格式化_Java对象转json JsonFormat注解

    写在前面,首先,我用的java转json序列化的工具是java开源的jackson. 今天在做后端接口的时候,发现获取的json对象中少了几个属性,因为其他的接口都能得到正确的json,所以很快就找到 ...

最新文章

  1. pytorch loss function 总结
  2. VC++ AfxBeginThread 与 CreateThread 的区别
  3. php中的单引号、双引号和转义字符
  4. 洛谷P2670扫雷游戏题解
  5. 迭代器 生成器 装饰器 匿名函数
  6. 总体方差的充分统计量_R方是否衡量预测能力或统计充分性?
  7. java控制台高级_K9s Kubernetes的高级控制台
  8. python显示小数点后几位数_Python编程从入门到实践-连载1(变量和简单数据类型)...
  9. 高清网络视频无损FLV教程
  10. Kotlin学习笔记 第二章 类与对象 第十一节 枚举类 第八节密封类
  11. Intellij idea 添加浏览器
  12. 显卡测试软件velmon,furmark显卡测试工具
  13. CSS-DIV页面布局
  14. MSP430的AD7705驱动程序
  15. Ruijie(RGOS 11.X)忘记登录密码console口恢复密码
  16. python3 print和format函数
  17. objectArx---AcGe几何类
  18. C语言函数大全-- q 开头的函数
  19. ctrl跳转失败 studio uap_uap进不去,重装studio和uap都不能行,请大神给看看
  20. 计算机组成原理中主机概念,计算机组成原理概念术语

热门文章

  1. python的用途实例-Python基础之函数原理与应用实例详解
  2. python基础知识面试题-基础篇--【python】面试题汇总
  3. LeetCode Add and Search Word - Data structure design(字典树)
  4. 一个声明指定了多个类型的问题
  5. hdu2561 第二小整数(排序)
  6. TimePicker的使用
  7. Day34 数据库的增、删 、改、查
  8. 日报 18/07/22 您的设计模式!终于有时间开写~ ~
  9. 操作document对象练习
  10. 如何查看某个端口被谁占用