JSON之Jackson(一)

JSON之Jackson(二)

1.JSON简介

JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。 JSON与 XML具有相同的特性,例如易于人编写和阅读,易于机器生成和解析。但是 JSON比XML数据传输的有效性要高出很多。 JSON完全独立与编程语言,使用文本格式保存。JSON的数据格式是名/值对,其中值可以是:

  1. 数字(整数或浮点数)
  2. 字符串(在双引号中)
  3. 逻辑值(true 或 false)
  4. 数组(在方括号中)
  5. 对象(在花括号中)
  6. null

更多关于JSON的数据格式的说明可以参考JSON官方网站:http://www.json.org,也可以参考中文网站:http://www.json.org/json-zh.html。下面是一个JSON文件的例子:

{"brand": "Mercedes","doors": 5,"owner": {"first": "Gatsby","last": "Newton"},"component": ["engine", "brake"]
}

2.Jackson

Jackson是一种JSON API,也是最流行,速度最快的JSON API。Jackson的在线API文档可以在http://wiki.fasterxml.com/JacksonInFiveMinutes中找到。Jackson的源代码托管在:https://github.com/FasterXML/jackson。

Jackson提供了两种不同的JSON解析器:

  1. ObjectMapper:把JSON解析到自定义的Java类中,或者解析到一个Jackson指定的树形结构中(Tree model)。
  2. Jackson JsonParser:一种“拉式”(pull)解析器,每次解析一组JSON数据。

Jackson也包含了两种不同的JSON生成器:

  1. ObjectMapper:把自定义的Java类,或者一个Jackson指定的树形结构生成为JSON文件。
  2. Jackson JsonGenerator:每次只生成一组JSON数据。

3.Jackson的安装

Jackson包含一个core JAR,和两个依赖core JAR的JAR:

  1. Jackson Core
  2. Jackson Annotations
  3. Jackson Databind

其中Jackson Annotations依赖Jackson Core,Jackson Databind依赖Jackson Annotations。

这三个JAR可以从Maven中央仓库下载,然后放在CLASSPATH中,也可以用Maven配置:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson-version}</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson-version}</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${jackson-version}</version>
</dependency>

4.ObjectMapper

4.1ObjectMapper解析JSON

com.fasterxml.jackson.databind.ObjectMapper在Jackson Databind中。ObjectMapper可以从String,File,InputStream,URL,自定义的Java类中读取JSON,ObjectMapper中的重载方法readValue()实现了这些功能。下面看从String读取;

public static void readFromString(){String carJson =  "{ \"brand\" : \"Mercedes\"," +"  \"doors\" : 5," +"  \"owners\" : [\"John\", \"Jack\", \"Jill\"]," +"  \"nestedObject\" : { \"field\" : \"value\" } }";ObjectMapper objectMapper = new ObjectMapper();try {// Read JSON from a Reader instance.
//            Reader reader = new StringReader(carJson);
//            JsonNode node = objectMapper.readValue(reader, JsonNode.class);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");Integer doors = doorsNode.asInt();System.out.println("doors = " + doors);JsonNode owners = node.get("owners");JsonNode johnNode = owners.get(0);String owner = johnNode.asText();System.out.println("john = " + owner);JsonNode nestNode = node.get("nestedObject");JsonNode fieldNode = nestNode.get("field");String field = fieldNode.asText();System.out.println("field = " + field);}catch (Exception e){e.printStackTrace();}
}

ObjectMapper如果解析JSON到Java类,那么这个Java类必须是简单的POJO,这个POJO的User的代码就不贴了:

public static void readToPOJO()throws IOException{String json = "{ \"name\": \"Gatsby\","+ "  \"gender\": \"MALE\","+ "  \"age\": 24"+ "}";ObjectMapper objectMapper = new ObjectMapper();try{User user = objectMapper.readValue(json, User.class);System.out.print(user.toString());}catch (Exception e){e.printStackTrace();}}

下面ObjectMapper从File中解析JSON的例子,至于URL等就不一一列举了:

car.json文件:

{"brand": "Mercedes","doors": 5,"owner": {"first": "Gatsby","last": "Newton"},"component": ["engine", "brake"]
}

示例代码:

public static void readFromFile(){try {String path = "F:\\Codes\\IDEA\\Tools\\data\\json\\car.json";// Read JSON from an local file.
//            File file = new File(path);// Read JSON from an InputStream.InputStream input = new FileInputStream(path);ObjectMapper objectMapper = new ObjectMapper();JsonNode node = objectMapper.readValue(input, JsonNode.class);JsonNode brandNode = node.get("brand");String brand = brandNode.asText();System.out.println("brand = " + brand);JsonNode doorsNode = node.get("doors");Integer doors = doorsNode.asInt();System.out.println("doors = " + doors);JsonNode ownerNode = node.get("owner");JsonNode nameNode = ownerNode.get("first");String first = nameNode.asText();System.out.println("first = " + first);JsonNode comsNode = node.get("component");JsonNode comNode = comsNode.get(0);String component = comNode.asText();System.out.println("component = " + component);}catch (Exception e){e.printStackTrace();}
}

4.2ObjectMapper生成JSON

和解析JSON一样,ObjectMapper也可以把JSON生成到String,自定义的Java类,File中。如生成到String中:

public static void writeToString(){Car car = new Car("BMW", 4, new Car.Owner("Gatsby", "Newton"), new String[]{"engine", "brake"});ObjectMapper objectMapper = new ObjectMapper();try{String json = objectMapper.writeValueAsString(car);System.out.println(json);}catch (Exception e){e.printStackTrace();}
}

生成到File中:

public static void writeToFile()throws IOException{Car car = new Car("BMW", 4, new Car.Owner("Gatsby", "Newton"), new String[]{"engine", "brake"});ObjectMapper objectMapper = new ObjectMapper();OutputStream outputStream = null;try{outputStream = new FileOutputStream(new File("F:\\Codes\\IDEA\\Tools\\data\\json\\out\\out.json"));objectMapper.writeValue(outputStream, car);}catch (Exception e){e.printStackTrace();}finally {if (outputStream != null){outputStream.close();}}
}

例子的源代码托管在:https://github.com/GatsbyNewton/jackson

参考文献:

http://wiki.fasterxml.com/JacksonInFiveMinutes Jackson官方教程示例
http://wiki.fasterxml.com/JacksonJavaDocs Jackson在线API文档

JSON之Jackson(一)相关推荐

  1. 两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)

    本篇文章主要介绍了"两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)",主要涉及到两款JSON类库Jackson与JSON-lib的性能对比(新增第三款 ...

  2. Spring Restful Web服务示例 - 使用JSON,Jackson和客户端程序

    Spring Restful Web服务示例 - 使用JSON,Jackson和客户端程序 Spring是最广泛使用的Java EE框架之一.我们之前已经看到了如何使用Spring MVC来创建基于J ...

  3. Java JSON库Jackson 2 x新变化一览

    <Java JSON库Jackson 2.x新变化一览> 作者:chszs,转载需注明. 作者博客主页:http://blog.csdn.net/chszs Jackson库是JSON J ...

  4. Android系统 (190)---Android:JSON 简介 amp; 解析方式 讲解(Gson、AS自带org.json、Jackson)

    Android:JSON 简介 & 解析方式 讲解(Gson.AS自带org.json.Jackson) 前言 现今最主流的数据交换格式 非 JSON莫属 今天,我将全面介绍 JSON &am ...

  5. 三款JSON类库Jackson,Gson与JSON-lib的性能对比

    近日做一些性能优化工作,在挑选JSON类库时,发现除了一般常用的JSON-lib外,还有一款号称性能最快的JSON处理器Jackson,于是用上了刚学会的JMeter,对这两个类库进行了简单的性能对比 ...

  6. java jackson包_java json工具包Jackson的使用

    官方的五分钟入门文档: 国内某位同仁的翻译版(算是翻译版吧) 除了这些简单的应用外,有时还会遇到一些比较特殊的场景 pojo的字段名与实际的属性名不一样 某些属性不需要作json转换 字段以指定的顺序 ...

  7. 什么是JSON? 以及jackson的使用

    1.题外话 前后端分离时代 后端部署后端,提供接口,提供数据 json 前端独立部署,负责渲染后端的数据 2.什么是JSON JSON(JavaScript Object Notation, JS对象 ...

  8. Java操作Json工具——Jackson

    // Maven配置 <dependencies><dependency><groupId>com.fasterxml.jackson.core</group ...

  9. 把实体 转为json 数据格式---jackson 的详细用法.

    下载:http://www.oschina.net/p/jackson 首先介绍三个注解: @JsonAutoDetect (method/field):作用于方法或字段,用来表明,当生成json的时 ...

最新文章

  1. 每日一皮:史上最直观的单向循环链表,还不懂算我输!
  2. 安全管家安卓_pc-cillin和腾讯电脑管家比较哪个更好
  3. join和group by能一块用吗_冷冻一下地球能缓解温室效应吗?| No.171
  4. 软考信息安全工程师学习笔记四(1.4 信息安全标准化知识)
  5. 控件:DataGridView列类型
  6. Python检测U盘插入、自动复制文件并写入新文件
  7. 如何通过改造休闲旅行车赚到1000万元?
  8. mysql登陆时报错PID_Mysql 启动错误:the server quit without updating pid
  9. 【深度优先搜索】记忆化搜索 P1077 摆花
  10. Android NDK开发之 opencv manage 免安装生成opencv应用
  11. python用时间戳给文件命名规则_关于时间戳:python复制文件但保持原始
  12. 利用端口映射解决:拥有公网IP有限,内网需要访问因特网
  13. C++从屏幕输入数字以空格分割,存入整型数组
  14. 利用IAR软件,将KEIL项目工程直接转换IAR项目工程
  15. h5、app、小程序 互相跳转打开的方式总结
  16. 学微积,用手机,人人“知识共享”学真知
  17. 中药治疗糖尿病十六则常用方-中药治疗糖尿病
  18. 2020年复旦大学计算机学院夏令营经历
  19. 计算机发明时间 冯诺依曼,电脑是谁发明的,冯·诺依曼和图灵(两人都起到了重要作用)...
  20. [转载] 约瑟夫问题的数学方法(O(n))

热门文章

  1. 深度解剖数据在内存中的存储!!数据在内存中原来是这样表示的?为什么浮点数和整数的存储方式差距这么大?
  2. USB 2.0 眼图测试
  3. 计算机硬盘类型及特点,硬盘有几种类型其特点分别是什么
  4. 鱼、美元和经济的故事
  5. Win10中英文输入法无法切换解决办法
  6. word打印为pdf去掉批注和修订记录
  7. pve6.4升级到7.0
  8. Python是男人就下一百层小游戏源代码
  9. 声学中自由场、扩散场、压力场的定义,及自由场/扩散场/压力场麦克风的定义
  10. 用计算机弹sunburst,Native Instrument 电吉他音源 Session Guitarist – Electric Sunburst 使用感受...