转,JSON解析1

在开发有关接口的时候,我们就需要设计接口返回的数据格式,常用的数据格式有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. 新建测试项目。

    实体类,

 

[java] view plain copy
 
  1. public class Person {  
  2.     private int id;  
  3.     private String name;  
  4.     private int age;  
  5.     public int getId() {  
  6.         return id;  
  7.     }  
  8.     public void setId(int id) {  
  9.         this.id = id;  
  10.     }  
  11.     public String getName() {  
  12.         return name;  
  13.     }  
  14.     public void setName(String name) {  
  15.         this.name = name;  
  16.     }  
  17.     public int getAge() {  
  18.         return age;  
  19.     }  
  20.     public void setAge(int age) {  
  21.         this.age = age;  
  22.     }  
  23.     @Override  
  24.     public String toString() {  
  25.         return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";  
  26.     }  
  27. }  

   使用GSON和JackJson分别解析。

  2. GSON。GSON是Google开发的Java API,用于转换Java对象和Json对象。

 

  2.1.  首先下载导入GSON的jar。

      (1).可以去github的链接,下载GSON的源码,自己编译,生成jar;

      (2).也可以直接下载jar包,GSONjar包下载链接。

      (3).gson-2.6.6.jar 下载链接。

   2.2.生成对象。

 

[java] view plain copy
 
  1. public static void main(String[] args) {  
  2.         Gson gson=new Gson();  
  3.         Person person=new Person();  
  4.         person.setId(1);  
  5.         person.setName("zhangsan");  
  6.         person.setAge(30);  
  7.         String str=gson.toJson(person);  
  8.         System.out.println(str);  
  9. }  

   2.3.输出结果。

 

 

[java] view plain copy
 
  1. {"id":1,"name":"zhangsan","age":30}  

 

  2.4.生成数组。

 

[java] view plain copy
 
  1. public static void main(String[] args) {  
  2. List<Person> list=new ArrayList<Person>();  
  3.         Gson gson=new Gson();  
  4.         Person person=new Person();  
  5.         person.setId(1);  
  6.         person.setName("zhangsan");  
  7.         person.setAge(30);  
  8.         list.add(person);  
  9.         Person person1=new Person();  
  10.         person1.setId(2);  
  11.         person1.setName("lisi");  
  12.         person1.setAge(20);  
  13.         list.add(person1);  
  14.         String str=gson.toJson(list);  
  15.         System.out.println(str);  
  16. }  

  2.5.输出结果。

[java] view plain copy
 
  1. [{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20}]  

 

  2.6.json解析对象。

 

[java] view plain copy
 
  1. public static void main(String[] args) {  
  2. String str="{\"id\":1,\"name\":\"zhangsan\",\"age\":30}";  
  3.         Gson gson=new Gson();  
  4.         Person person=gson.fromJson(str, Person.class);  
  5.         System.out.println(person.toString());  
  6. }  

  2.7.输出结果。

[java] view plain copy
 
  1. Person [id=1, name=zhangsan, age=30]  

  2.8.json解析数组。

 

 

[java] view plain copy
 
  1. public static void main(String[] args) {  
  2. String str = "[{\"id\":1,\"name\":\"zhangsan\",\"age\":30},{\"id\":2,\"name\":\"lisi\",\"age\":20}]";  
  3.         Gson gson = new Gson();  
  4.         Type type = new TypeToken<List<Person>>() {  
  5.         }.getType();  
  6.         List<Person> list = gson.fromJson(str, type);  
  7.         for (Person person : list) {  
  8.             System.out.println(person.toString());  
  9.         }  
  10. }  

  2.9.输出结果。

[java] view plain copy
 
  1. Person [id=1, name=zhangsan, age=30]  
  2. Person [id=2, name=lisi, age=20]  

 

  3.JackJson。

   Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”。 
   Jackson框架包含了3个核心库:streaming,databind,annotations。

 3.1 库下载地址

  Jackson https://github.com/FasterXML/jackson-core/wiki

   Databind https://github.com/FasterXML/jackson-databind

   Annotations https://github.com/FasterXML/jackson-annotations/wiki

  Jackson doc https://github.com/FasterXML/jackson-docs

  3.2.生成对象。

 

[java] view plain copy
 
  1. Person person=new Person();  
  2.      person.setId(1);  
  3.      person.setName("zhangsan");  
  4.      person.setAge(30);  
  5.      ObjectMapper objectMapper = new ObjectMapper();  
  6.      try {  
  7.         String json=objectMapper.writeValueAsString(person);  
  8.         System.out.println(json);  
  9.     } catch (JsonProcessingException e) {  
  10.         // TODO Auto-generated catch block  
  11.         e.printStackTrace();  
  12.     }  

   3.3. 结果。

 

 

[java] view plain copy
 
  1. {"id":1,"name":"zhangsan","age":30}  

   3.4. 生成数组。

 

 

[java] view plain copy
 
  1. List<Person> list=new ArrayList<Person>();  
  2.      Person person=new Person();  
  3.      person.setId(1);  
  4.      person.setName("zhangsan");  
  5.      person.setAge(30);  
  6.      list.add(person);  
  7.      Person person1=new Person();  
  8.      person1.setId(2);  
  9.      person1.setName("lisi");  
  10.      person1.setAge(20);  
  11.      list.add(person1);  
  12.      Person person2=new Person();  
  13.      person2.setId(3);  
  14.      person2.setName("wangwu");  
  15.      person2.setAge(30);  
  16.      list.add(person1);  
  17.      ObjectMapper objectMapper = new ObjectMapper();  
  18.      try {  
  19.         String json=objectMapper.writeValueAsString(list);  
  20.         System.out.println(json);  
  21.     } catch (JsonProcessingException e) {  
  22.         // TODO Auto-generated catch block  
  23.         e.printStackTrace();  
  24.     }  

 

   3.5.结果。

 

[java] view plain copy
 
  1. [{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20},{"id":2,"name":"lisi","age":20}]  

 

   3.6.json解析对象。

 

[java] view plain copy
 
  1. Person person=new Person();  
  2.      person.setId(1);  
  3.      person.setName("zhangsan");  
  4.      person.setAge(30);  
  5.      ObjectMapper objectMapper = new ObjectMapper();  
  6.      try {  
  7.         String json=objectMapper.writeValueAsString(person);  
  8.         System.out.println(json);  
  9.         Person info=objectMapper.readValue(json, Person.class);  
  10.         System.out.println(info.toString());  
  11.     } catch (JsonProcessingException e) {  
  12.         // TODO Auto-generated catch block  
  13.         e.printStackTrace();  
  14.     } catch (IOException e) {  
  15.         // TODO Auto-generated catch block  
  16.         e.printStackTrace();  
  17.     }  
  18. }  

 

   3.7结果。

 

[java] view plain copy
 
  1. {"id":1,"name":"zhangsan","age":30}  
  2. Person [id=1, name=zhangsan, age=30]  

 

   3.8.json解析数组。

 

[java] view plain copy
 
  1. List<Person> list=new ArrayList<Person>();  
  2.      Person person=new Person();  
  3.      person.setId(1);  
  4.      person.setName("zhangsan");  
  5.      person.setAge(30);  
  6.      list.add(person);  
  7.      Person person1=new Person();  
  8.      person1.setId(2);  
  9.      person1.setName("lisi");  
  10.      person1.setAge(20);  
  11.      list.add(person1);  
  12.      Person person2=new Person();  
  13.      person2.setId(3);  
  14.      person2.setName("wangwu");  
  15.      person2.setAge(30);  
  16.      list.add(person1);  
  17.      ObjectMapper objectMapper = new ObjectMapper();  
  18.      try {  
  19.         String json=objectMapper.writeValueAsString(list);  
  20.         System.out.println(json);  
  21.         Person[] persons=objectMapper.readValue(json, Person[].class);  
  22.         for (Person info:persons) {  
  23.             System.out.println(info.toString());  
  24.         }  
  25.     } catch (JsonProcessingException e) {  
  26.         // TODO Auto-generated catch block  
  27.         e.printStackTrace();  
  28.     } catch (IOException e) {  
  29.         // TODO Auto-generated catch block  
  30.         e.printStackTrace();  
  31.     }  

   3.9结果。

 

 

[java] view plain copy
 
  1. [{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20},{"id":2,"name":"lisi","age":20}]  
  2. Person [id=1, name=zhangsan, age=30]  
  3. Person [id=2, name=lisi, age=20]  
  4. Person [id=2, name=lisi, age=20]  

 

四.总结。

    如果你在开发的时候没有使用第三库去解析JSON,那么解析过程是很繁琐的。使用第三方库后,解析就很方便快捷。(建议大家在解析JSON数据时,先尽量不要使用第三方库,而使用SDK提供的API去解析数据,这样你对JSON数据以及SDK都会了解的更深刻)

PS:比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候可以更省流量,但缺点在于,它的语义较差,看起来不如XML直观。

posted @ 2018-01-23 19:17  杨柳春色  阅读(84)  评论(0编辑  收藏  举报