JSON语法及解析

JSON全程 JavaScript Object Notation,轻量级的数据交换格式

JSON语法:数据在(名/值)对中保存,逗号分隔,[ ] 保存数组,{ } 保存对象,“name”:“张三”。

对象的存储格式:

[java] view plain copy
  1. String json = "{name:'Lily',age:23,id:1}"  
数组的保存格式:
[java] view plain copy
  1. [{name:"lily",age:23,id:2},{name:"lucy",age:23,id:3}]  

JSON解析:

首先先创建两个需要的实体类Person和Dept。

[java] view plain copy
  1. package com.qf.bean;  
  2.   
  3. public class Person {  
  4.     private String name;  
  5.     private int age;  
  6.     public String getName() {  
  7.         return name;  
  8.     }  
  9.     public void setName(String name) {  
  10.         this.name = name;  
  11.     }  
  12.     public int getAge() {  
  13.         return age;  
  14.     }  
  15.     public void setAge(int age) {  
  16.         this.age = age;  
  17.     }  
  18.     @Override  
  19.     public String toString() {  
  20.         return "Person [name=" + name + ", age=" + age + "]";  
  21.     }  
  22.     public Person(String name, int age) {  
  23.         super();  
  24.         this.name = name;  
  25.         this.age = age;  
  26.     }  
  27.     public Person() {  
  28.         super();  
  29.     }  
  30.       
  31. }  
[java] view plain copy
  1. package com.qf.bean;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class Dept {  
  6.     private int no;  
  7.     private String name;  
  8.     private List personList;  
  9.     public int getNo() {  
  10.         return no;  
  11.     }  
  12.     public void setNo(int no) {  
  13.         this.no = no;  
  14.     }  
  15.     public String getName() {  
  16.         return name;  
  17.     }  
  18.     public void setName(String name) {  
  19.         this.name = name;  
  20.     }  
  21.     public List getPersonList() {  
  22.         return personList;  
  23.     }  
  24.     public void setPersonList(List personList) {  
  25.         this.personList = personList;  
  26.     }  
  27.     @Override  
  28.     public String toString() {  
  29.         return "Dept [no=" + no + ", name=" + name + ", personList=" + personList + "]";  
  30.     }  
  31.     public Dept(int no, String name, List personList) {  
  32.         super();  
  33.         this.no = no;  
  34.         this.name = name;  
  35.         this.personList = personList;  
  36.     }  
  37.     public Dept() {  
  38.         super();  
  39.     }  
  40.       
  41. }  

1、导包 json-lib.jar

2、使用:解析;生成。

[java] view plain copy
  1. package com.qf.servlet;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.json.JSONArray;  
  7. import org.json.JSONException;  
  8. import org.json.JSONObject;  
  9. import org.junit.Test;  
  10.   
  11. import com.qf.bean.Dept;  
  12. import com.qf.bean.Person;  
  13.   
  14. public class JsonTest {  
  15.     //解析  
  16.     @Test  
  17.     public void t1() throws JSONException {  
  18.         // json字符串  
  19.         String json = "{no:1,name:'java',personList:[{name:'王五',age:'20'},"   
  20.                 + "{name:'王五222',age:'22'},"  
  21.                 + "{name:'王五333',age:'23'}]}";  
  22.         //{开头的是对象,用JSONObject  
  23.         JSONObject o = new JSONObject(json);  
  24.         //创建Dept实体类  
  25.         Dept dept = new Dept();  
  26.         dept.setNo(o.getInt("no"));  
  27.         dept.setName(o.getString("name"));  
  28.         //[开头的personList,数组getJSONArray  
  29.         JSONArray a = o.getJSONArray("personList");  
  30.         List list = new ArrayList<>();  
  31.         for (int i = 0; i < a.length(); i++) {  
  32.             JSONObject o2 = a.getJSONObject(i);  
  33.             // 创建对象  
  34.             Person p = new Person();  
  35.             p.setName(o2.getString("name"));  
  36.             p.setAge(o2.getInt("age"));  
  37.             list.add(p);  
  38.         }  
  39.         dept.setPersonList(list);  
  40.         System.out.println(dept);  
  41.     }  
  42.     //生成  
  43.     @Test  
  44.     public void t2() throws JSONException {  
  45.         JSONObject o = new JSONObject();  
  46.         o.put("name""张三");  
  47.         o.put("age"29);  
  48.         System.out.println(o);  
  49.         //String json = "{person:{name:'李四',age:80}}";  
  50.         Person p = new Person();  
  51.         p.setName("李四");  
  52.         p.setAge(80);  
  53.         JSONObject o2 = new JSONObject();  
  54.         o2.put("person", p);  
  55.         System.out.println(o2);  
  56.     }  
  57. }  

GSON解析

1、导包 gson-2.2.1.jar

2、解析生成

[java] view plain copy
  1. package com.qf.bean;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import org.junit.Test;  
  6.   
  7. import com.google.gson.Gson;  
  8. import com.google.gson.reflect.TypeToken;  
  9. import com.qf.bean.Dept;  
  10. import com.qf.bean.Person;  
  11.   
  12. public class GsonTest {  
  13.     //解析  
  14.     @Test  
  15.     public void t1(){  
  16.         String json = "{no:1,name:'java',personList:[{name:'王五',age:'20'},{name:'王五222',age:'22'},{name:'王五333',age:'23'}]}";  
  17.         //创建Gson对象  
  18.         Gson gson = new Gson();  
  19.         //解析对象  
  20.         //fromJson()方法 第一个参数:要解析的字符串 第二个参数:结果数据类型.class 字节码文件对象  
  21.         Dept dept = gson.fromJson(json, Dept.class);  
  22.         System.out.println(dept);  
  23.           
  24.         //解析数组  
  25.         String json2 = "['北京','上海','广州']";  
  26.         /* 
  27.          * 发现解析数组 需要 Type 
  28.          * TypeToken 类 它是gson提供的数据类型转换器 可以支持各种的数据类型 集合类型的转换 
  29.          * 1.创建TypeToken的子类对象->new TypeToken>(){} 
  30.          * 2.调用 getType()方法 返回Type类型 
  31.          * */  
  32.         ArrayList list = gson.fromJson(json2, new TypeToken>(){}.getType());  
  33.         System.out.println(list);  
  34.     }  
  35.     //生成  
  36.     @Test  
  37.     public void t2(){  
  38.         ArrayList list = new ArrayList<>();  
  39.         for(int i=1;i<3;i++){  
  40.             list.add(new Person("张三",20+i));  
  41.         }  
  42.         //String json = "{no:1,name:'java',personList:[{name:'王五',age:'20'},{name:'王五222',age:'22'}]}";  
  43.         Dept dept = new Dept(10001,"html",list);  
  44.         //生成json格式字符串  
  45.         Gson gson = new Gson();  
  46.         String json = gson.toJson(dept);  
  47.         System.out.println(json);  
  48.     }  
  49. }  

FASTJSON解析

1、导包 fastjson-1.2.35.jar

2、解析(static方法JSON调用parseObject)、生成(static方法JSON调用toJSONString)。

[java] view plain copy
  1. package com.qf.bean;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.junit.Test;  
  7.   
  8. import com.alibaba.fastjson.JSON;  
  9. import com.qf.bean.Dept;  
  10. import com.qf.bean.Person;  
  11.   
  12. public class FastJsonTest {  
  13.     //解析  
  14.     @Test  
  15.     public void t1(){  
  16.         //对象  
  17.         String json = "{no:1,name:'java',personList:[{name:'王五',age:'20'},{name:'王五222',age:'22'},{name:'王五333',age:'23'}]}";  
  18.         //静态方法调用  
  19.         Dept dept = JSON.parseObject(json,Dept.class);  
  20.         System.out.println(dept);  
  21.           
  22.         //数组  
  23.         String json2 = "['背景','广州','天津']";  
  24.         //第一个参数 要解析的字符串 第二个参数 泛型的.class 字节码文件对象  
  25.         List list = JSON.parseArray(json2, String.class);  
  26.         System.out.println(list);  
  27.     }  
  28.     //生成  
  29.     @Test  
  30.     public void t2(){  
  31.         ArrayList list = new ArrayList<>();  
  32.         for(int i=1;i<3;i++){  
  33.             list.add(new Person("张三",20+i));  
  34.         }  
  35.         Dept dept = new Dept(10002"ios", list);  
  36.         String json = JSON.toJSONString(dept);  
  37.         System.out.println(json);  
  38.     }  

你可能感兴趣的:(JSON相关)