JSON之Jackson(一)
来源:互联网 发布:好的比价软件 编辑:程序博客网 时间:2024/05/19 02:39
JSON之Jackson(一)
JSON之Jackson(二)
1.JSON简介
JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。 JSON与 XML具有相同的特性,例如易于人编写和阅读,易于机器生成和解析。但是 JSON比XML数据传输的有效性要高出很多。 JSON完全独立与编程语言,使用文本格式保存。JSON的数据格式是名/值对,其中值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- 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解析器:
- ObjectMapper:把JSON解析到自定义的Java类中,或者解析到一个Jackson指定的树形结构中(Tree model)。
- Jackson JsonParser:一种“拉式”(pull)解析器,每次解析一组JSON数据。
Jackson也包含了两种不同的JSON生成器:
- ObjectMapper:把自定义的Java类,或者一个Jackson指定的树形结构生成为JSON文件。
- Jackson JsonGenerator:每次只生成一组JSON数据。
3.Jackson的安装
Jackson包含一个core JAR,和两个依赖core JAR的JAR:
- Jackson Core
- Jackson Annotations
- 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文档
http://wiki.fasterxml.com/JacksonJavaDocs Jackson在线API文档
0 0
- JSON之Jackson(一)
- JSON之Jackson(二)
- JSON解析之Jackson
- JSON 之 jackson 用法
- Jackson学习一之对象与JSON互相转化
- Jackson学习一之对象与JSON互相转化
- Jackson学习一之对象与JSON互相转化
- Jackson(一):java对象与json字符串互相转换
- Jackson转换工具(json)
- JAX-RS之jackson去处理json
- java json 转换之 Jackson 框架
- 解析json之org.codehaus.jackson
- Java、Json转换方式之二:Jackson
- JSON详细学习之JackSon in JAVA
- Jackson之JSON包的使用分析
- Jackson之JSON包的使用分析
- Json解析之jackson的使用
- Jackson JSON
- 指向对象成员变量的指针
- 成员变量和局部变量的区别?
- android studio生成签名文件,以及SHA1和MD5值
- 百度首页排版
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系
- JSON之Jackson(一)
- Android:使用Handler在线程之间通信
- Eclipse中与Ctr+Z 相反的快捷键是?
- asp.net网站的初探
- Android singleTask和 taskAffinity
- Android 用MediaCodec实现视频硬解码
- 找出重复元素并计算次数
- 安装Ubuntu虚拟机详解
- 数据范围