
在开发有关接口的时候我们就需要设计接口返回的数据格式常用的数据格式有xml、json等。那么今天我们就来看看json的使用。一.JSON 描述。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式但是也使用了类似于C语言家族的习惯包括C、C、C#、Java、JavaScript、Perl、Python等。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写同时也易于机器解析和生成(一般用于提升网络传输速率)。二.语法规则。1. JSON是由‘名称/值’对组成的集合’名称/值‘格式例如“key1”:value1。2.JSON的值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。3.JSON有两种结构一种是对象另一种是数组。(1).对象(object)是一个无序的“‘名称/值’对”集合。一个对象以“{”左括号开始“}”右括号结束。每个“名称”后跟一个“:”冒号“‘名称/值’ 对”之间使用“,”逗号 分 隔。 是由{}括起来的格式例如{key1:value1,key2:value2,key3:value3,...}。(2).数组(array) 是值value的有序集合。一个数组以“[”左中括号开始“]”右中括号结束。值之间使用“,”逗号分隔是由[]括起来的。格式例如[{key1:value1,key2:value2,key3:value3},{key1:value1,key2:value2,key3:value3}...]。三.JSON解析。1. 新建测试项目。实体类public class Person { private int id; private String name; private int age; 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; } public int getAge() { return age; } public void setAge(int age) { this.age age; } Override public String toString() { return Person [id id , name name , age age ]; } }使用GSON和JackJson分别解析。2. GSON。GSON是Google开发的Java API用于转换Java对象和Json对象。2.1. 首先下载导入GSON的jar。(1).gson-2.6.6.jar 下载链接。2.2.生成对象。public static void main(String[] args) { Gson gsonnew Gson(); Person personnew Person(); person.setId(1); person.setName(zhangsan); person.setAge(30); String strgson.toJson(person); System.out.println(str); }2.3.输出结果。{id:1,name:zhangsan,age:30}2.4.生成数组。public static void main(String[] args) { ListPerson listnew ArrayListPerson(); Gson gsonnew Gson(); Person personnew Person(); person.setId(1); person.setName(zhangsan); person.setAge(30); list.add(person); Person person1new Person(); person1.setId(2); person1.setName(lisi); person1.setAge(20); list.add(person1); String strgson.toJson(list); System.out.println(str); }2.5.输出结果。[{id:1,name:zhangsan,age:30},{id:2,name:lisi,age:20}]2.6.json解析对象。public static void main(String[] args) { String str{\id\:1,\name\:\zhangsan\,\age\:30}; Gson gsonnew Gson(); Person persongson.fromJson(str, Person.class); System.out.println(person.toString()); }2.7.输出结果。Person [id1, namezhangsan, age30]2.8.json解析数组。public static void main(String[] args) { String str [{\id\:1,\name\:\zhangsan\,\age\:30},{\id\:2,\name\:\lisi\,\age\:20}]; Gson gson new Gson(); Type type new TypeTokenListPerson() { }.getType(); ListPerson list gson.fromJson(str, type); for (Person person : list) { System.out.println(person.toString()); } }2.9.输出结果。Person [id1, namezhangsan, age30] Person [id2, namelisi, age20]3.JackJson。Jackson框架是基于Java平台的一套数据处理工具被称为“最好的Java Json解析器”。Jackson框架包含了3个核心库streaming,databind,annotations。3.1 库下载地址。Jackson Pages · FasterXML/jackson-core Wiki · GitHubDatabind GitHub - FasterXML/jackson-databind: General>Person personnew Person(); person.setId(1); person.setName(zhangsan); person.setAge(30); ObjectMapper objectMapper new ObjectMapper(); try { String jsonobjectMapper.writeValueAsString(person); System.out.println(json); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); }3.3. 结果。{id:1,name:zhangsan,age:30}3.4. 生成数组。ListPerson listnew ArrayListPerson(); Person personnew Person(); person.setId(1); person.setName(zhangsan); person.setAge(30); list.add(person); Person person1new Person(); person1.setId(2); person1.setName(lisi); person1.setAge(20); list.add(person1); Person person2new Person(); person2.setId(3); person2.setName(wangwu); person2.setAge(30); list.add(person1); ObjectMapper objectMapper new ObjectMapper(); try { String jsonobjectMapper.writeValueAsString(list); System.out.println(json); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); }3.5.结果。[{id:1,name:zhangsan,age:30},{id:2,name:lisi,age:20},{id:2,name:lisi,age:20}]3.6.json解析对象。Person personnew Person(); person.setId(1); person.setName(zhangsan); person.setAge(30); ObjectMapper objectMapper new ObjectMapper(); try { String jsonobjectMapper.writeValueAsString(person); System.out.println(json); Person infoobjectMapper.readValue(json, Person.class); System.out.println(info.toString()); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }3.7结果。{id:1,name:zhangsan,age:30} Person [id1, namezhangsan, age30]3.8.json解析数组。ListPerson listnew ArrayListPerson(); Person personnew Person(); person.setId(1); person.setName(zhangsan); person.setAge(30); list.add(person); Person person1new Person(); person1.setId(2); person1.setName(lisi); person1.setAge(20); list.add(person1); Person person2new Person(); person2.setId(3); person2.setName(wangwu); person2.setAge(30); list.add(person1); ObjectMapper objectMapper new ObjectMapper(); try { String jsonobjectMapper.writeValueAsString(list); System.out.println(json); Person[] personsobjectMapper.readValue(json, Person[].class); for (Person info:persons) { System.out.println(info.toString()); } } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }3.9结果。[{id:1,name:zhangsan,age:30},{id:2,name:lisi,age:20},{id:2,name:lisi,age:20}] Person [id1, namezhangsan, age30] Person [id2, namelisi, age20] Person [id2, namelisi, age20]四.总结。如果你在开发的时候没有使用第三库去解析JSON那么解析过程是很繁琐的。使用第三方库后解析就很方便快捷。建议大家在解析JSON数据时先尽量不要使用第三方库而使用SDK提供的API去解析数据这样你对JSON数据以及SDK都会了解的更深刻PS:比起XMLJSON的主要优势在于它的体积更小在网络上传输的时候可以更省流量但缺点在于它的语义较差看起来不如XML直观。PS:示例代码下载推荐文章 java web开发(一) 环境搭建JSON 解析Android学习资料整理json格式化工具帮助文档JSON 入门指南JSON中文网