一,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 student
Student 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 Object
studentDataMap.put("student", student);
// JAVA String
studentDataMap.put("name", "Mahesh Kumar");
// JAVA Boolean
studentDataMap.put("verified", Boolean.FALSE);
// Array
studentDataMap.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 student
Student 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 token
String 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;
} @Override
public String toString() {
return "log [id=" + id + ", name=" + name + "]";
} }

jackson-api:

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

												

jackson json转对象 对象转json的更多相关文章

  1. jackson 进行json与java对象转换 之四

    jackson简单使用,对象转json,json转对象,json转list   POJO序列化为json字符串: 准备一个POJO: @JsonIgnoreProperties(ignoreUnkno ...

  2. jackson 进行json与java对象转换 之三

    2.测试类,没用Junit,用Main()方法输出. package test; import java.io.IOException; import java.util.ArrayList; imp ...

  3. JSON和java对象的互转

    先说下我自己的理解,一般而言,JSON字符串要转为java对象需要自己写一个跟JSON一模一样的实体类bean,然后用bean.class作为参数传给对应的方法,实现转化成功. 上述这种方法太麻烦了. ...

  4. json和java对象相互转换

    json和java对象相互转换 springboot中json转换默认使用的是jackson包,通过spring-boot-starter-web依赖的 1 在属性上添加注解@JsonFormat(p ...

  5. @JsonInclude注解,RestTemplate传输值为null的属性,利用FastJson将属性中有空值null的对象转化成Json字符串

    一个pojo类: import lombok.Data; @Data public class Friend { private String name; private int age; priva ...

  6. json转java对象

    用了平台之后很少再接触到java和js的底层代码,前几天远程帮一个萌新远程调试代码,这个萌新按照网上的教程去将json字符转java对象却一直报错.真相是它的json字符串格式不对,他的明明是一个数组 ...

  7. redis通过json方案存取对象com.alibaba.fastjson.JSONException: syntax error, expect

    问题描述: redis基于json方案存取对象时报错:com.alibaba.fastjson.JSONException: syntax error, expect com.alibaba.fast ...

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

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

  9. SpringMVC分页查询无法直接将对象转换成json的解决办法(报org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type:错)

    在用ajax获得分页数据时,无法将获取的值赋值给input标签,在修改用户信息时不显示用户已经注册的信息,百度可知 springmvc处理分页数据返回的对象时,无法直接将对象转换成json,会报org ...

随机推荐

  1. getMessage(),getFile,getLine获取异常用法

    try { $param = $request->all(); $param['building_id'] = 0; $param['sync'] = 2; // 1小程序2App $param ...

  2. Unit 2.前端之html--table(表格),form(表单)标签

    一.table标签 作用:定义html表格.一个table标签元素至少包含 thead(表头),tbody(表主题),还可以有tfoot(表底部) html表格游table元素及一个或者多个tr,th ...

  3. Eclipse中修改jsp、html……的编码格式

    一般如果使用的是Eclipse的默认编码格式,在我们保存的时候会提示选择保存的编码格式,保存后英文没有问题,但是中文就会乱码. 修改方式是: Windows——>Preferences——> ...

  4. BugFree 安装

    BugFree基于PHP和MySQL开发,是免费且开发源代码的缺陷管理系统.服务器端在Linux和Windows平台上都可以运行:客户端无需安装任何软件,通过IE,FireFox等浏览器就可以自由使用 ...

  5. 在delphi中生成GUID/自动获取临时表名......

    什么是 GUID ? 全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装.在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID. GUID 的格式为 ...

  6. Learning to Rank for IR的评价指标—MAP,NDCG,MRR

    转自: https://www.cnblogs.com/eyeszjwang/articles/2368087.html MAP(Mean Average Precision):单个主题的平均准确率是 ...

  7. 算法题 -- 输入一个Long数组,按要求输出一个等长的Long数组

    /** * 输入一个Long数组,按要求输出一个等长的Long数组 * 输出数组的元素值等于,输入数组除相同下标外其他元素的积 * 如:输入[1, 2, 3, 4], 输出[24, 12, 8, 6] ...

  8. python 计算机基础

    1.什么是编程语言. 语言是一个事物与另一个事物沟通的介质. 编程语言是程序员与计算机沟通的介质. 2.什么是编程. 编程是人按照某种语法规范设计出计算机能够识别的语言 表达的结果是程序,程序就是一系 ...

  9. WinForm中在非UI线程更改控件值的办法

    从非UI线程调用UI控件赋值.或进行其他更新UI的操作的话,会出现异常: System.InvalidOperationException:“线程间操作无效: 从不是创建控件“xxx”的线程访问它.” ...

  10. hdu1875(最小生成树prime)

    思路:一开始想用贪心来着,发现贪心有缺陷,然后就用了最小生成树来写,这里用了prime算法,首先,先建个图,两点之间的边的权值就是两个点的距离,然后直接prime模板 代码 #include<i ...