JSON解析之Jackson
来源:互联网 发布:淘宝一淘是什么意思 编辑:程序博客网 时间:2024/05/01 19:58
JSON简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
在Java中有多种工具可以用来解析或者生成Json,如下图所示。
参考官网
其中较常用到的有JSON-java、Jackson、Json-lib。
Jackson可以轻松地将Java对象转换成json和xml文档,同样,也可以容易地将json或者xml文档转换成Java对象。
1.准备
1)下载Jackson的jar包,在maven工程里面,导入代码如下:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.1</version> </dependency>
2)在maven中导入JUnit的jar包:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency>
3)新建一个JUnit测试类,JacksonTest.java
4)在maven工程的src/main/resources/目录下准备好几个Json文件,用于后面将Json文档转化为相应的Java类型。
map.json
{"class1":{"id":"11","name":"mason","gender":"male","age":24},"class2":{"id":"14","name":"jane","gender":"female","age":20}}
array.json
[{"id":"11","name":"mason","gender":"male","age":24},{"id":"16","name":"jame","gender":"male","age":24}]
list.json
[{"id":"11","name":"mason","gender":"male","age":24},{"id":"19","name":"jack","gender":"male","age":26}]
2.编码
1)准备一个Bean类,用于转换成json或从json接收数据,命名为StudentBean.java
public class StudentBean { private String id; private String name; private String gender; private Integer age; public StudentBean() { } public StudentBean(String id, String name, String gender, Integer age) { super(); this.id = id; this.name = name; this.gender = gender; this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "StudentBean [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]"; }}
2)编写主要的测试类,JacksonTest.java
import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Set;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.fasterxml.jackson.core.JsonEncoding;import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.databind.ObjectMapper;import bean.StudentBean;public class JacksonTest { private JsonGenerator generator = null; private ObjectMapper mapper = null; private StudentBean student = null; @Before public void setUp() throws Exception { student = new StudentBean("11","mason","male",24); mapper = new ObjectMapper(); generator = mapper.getFactory().createGenerator(System.out,JsonEncoding.UTF8); } @After public void tearDown() throws Exception { if(generator != null) { generator.flush(); } if(!generator.isClosed()) { generator.close(); } generator = null; mapper = null; student = null; System.gc(); } /* * JsonGenerator的writeObject方法和ObjectMapper的writeValue方法 * 都可以完成对Java对象的转换,只是二者传递的参数及构造的方式不同。 * JsonGenerator的创建依赖于ObjectMapper对象,也就是说如果你要使用JsonGenerator * 来转换JSON,那么你必须创建一个ObjectMapper, * 但是你用ObjectMapper来转换JSON,则不需要JSONGenerator。 * objectMapper的writeValue方法可以将一个Java对象转换成JSON, * 这个方法的参数一,需要提供一个输出流,转换后可以通过这个流来输出转换后的内容, * 或是提供一个File,将转换后的内容写入到File中, * 当然,这个参数也可以接收一个JSONGenerator,然后通过JSONGenerator来输出转换后的信息, * 第二个参数是将要被转换的Java对象。 */ @Test public void beanToJson() { System.out.println("StudentBean对象转换成Json文档:"); try { //使用JsonGenerator来转换 generator.writeObject(student); System.out.println(); //使用ObjectMapper来转换 mapper.writeValue(System.out, student); } catch (IOException e) { e.printStackTrace(); } } @Test public void mapToJson() { System.out.println("Map<String,StudentBean>集合对象转换成Json文档:"); try { Map<String,StudentBean> map = new HashMap<String,StudentBean>(); map.put("class1", student); StudentBean student2 = new StudentBean("14","jane","female",20); map.put("class2", student2); //使用JsonGenerator来转换 generator.writeObject(map); System.out.println(); //使用ObjectMapper来转换 mapper.writeValue(System.out, map); } catch (Exception e) { e.printStackTrace(); } } @Test public void listToJson() { System.out.println("List<StudentBean>集合对象转换成Json文档:"); try { List<StudentBean> list = new ArrayList<StudentBean>(); StudentBean student3 = new StudentBean("19","jack","male",26); list.add(student); list.add(student3); //使用JsonGenerator来转换 generator.writeObject(list); System.out.println(); //使用ObjectMapper来转换 mapper.writeValue(System.out, list); } catch (Exception e) { e.printStackTrace(); } } @Test public void arrayToJson() { System.out.println("StudentBean数组对象转换成Json文档:"); StudentBean[] arr = new StudentBean[2]; StudentBean student4 = new StudentBean("16","jame","male",24); arr[0] = student; arr[1] = student4; try { //使用JsonGenerator来转换 generator.writeObject(arr); System.out.println(); //使用ObjectMapper来转换 mapper.writeValue(System.out, arr); } catch (Exception e) { e.printStackTrace(); } } /* * 用到了ObjectMapper这个对象的readValue这个方法, * 这个方法需要提供2个参数:第一个参数就是解析的JSON字符串,第二个参数是即将将这个JSON解析成什么Java对象。 */ @Test public void jsonToBean() { System.out.println("Json文档转换为StudentBea对象:"); //需要使用转义字符 String json = "{\"id\":\"22\",\"name\":\"lily\",\"gender\":\"female\",\"age\":33}"; try { StudentBean student5 = mapper.readValue(json, StudentBean.class); System.out.println(student5); } catch (Exception e) { e.printStackTrace(); } } /* * 并不能转换成Map<String,StudentBean>的形式 * 而是装换成多层的Map结构 */ @Test public void jsonToMap() { System.out.println("Json文档转换为Map对象:"); File src = new File("src/main/resources/map.json"); try { Map<String,Map<String,Object>> map = mapper.readValue(src, Map.class); Set<String> keys = map.keySet(); Iterator<String> it = keys.iterator(); while(it.hasNext()) { String className = it.next(); System.out.println(className+":"+map.get(className)); } } catch (Exception e) { e.printStackTrace(); } } @Test public void jsonToArray() { System.out.println("Json文档转换为Array对象:"); File src = new File("src/main/resources/array.json"); try { StudentBean[] students = mapper.readValue(src, StudentBean[].class); for (StudentBean studentBean : students) { System.out.println(studentBean); } } catch (Exception e) { e.printStackTrace(); } } @Test public void jsonToList() { System.out.println("Json文档转换为List对象:"); File src = new File("src/main/resources/list.json"); try { List<LinkedHashMap<String,Object>> list = mapper.readValue(src, List.class); for (LinkedHashMap<String, Object> linkedHashMap : list) { System.out.println(linkedHashMap); } } catch (Exception e) { e.printStackTrace(); } }}
3.运行结果
4.总结
Jackson的使用比较简洁,越来越多的项目都开始使用它来解析Json数据。本文内容参考了Jackson 框架,轻易转换JSON
0 0
- JSON解析之Jackson
- 解析json之org.codehaus.jackson
- Json解析之jackson的使用
- jackson解析 json字符串
- Jackson解析JSON例子
- Jackson解析JSON例子
- java json解析-jackson
- jackson框架解析json
- Jackson解析JSON数据
- Json解析工具Jackson
- Jackson解析JSON例子
- java json解析-jackson
- Json解析工具Jackson
- JSON的解析[Jackson]
- java json解析-jackson
- jackson解析json
- JackSon解析json字符串
- Jackson框架解析Json
- Xcode Precompile Prefix Header浅析
- Android(监听+回调=观察者)模式从Dialog到Activity传递数据
- Tachyon源码结构分析(一)
- 01背包问题
- Android数据存储(一)----SharedPreferences详解
- JSON解析之Jackson
- POJ_3436_ACM_ComputerFactory
- Codevs.cn的青铜组题目题解
- virtualbox装WinXP系统
- POJ 3250 Bad Hair Day 单调
- Button ToggleButton Spinner Adapter Inflate
- BZOJ-1968 COMMON 约数研究 数论+奇怪的姿势
- Linux学习笔记(6)----Bash shell 登陆后配置文件的加载
- spring源码学习之五 </context:component-scan>元素处理过程