JSON全程 JavaScript Object Notation,轻量级的数据交换格式
JSON语法:数据在(名/值)对中保存,逗号分隔,[ ] 保存数组,{ } 保存对象,“name”:“张三”。
对象的存储格式:
- String json = "{name:'Lily',age:23,id:1}"
- [{name:"lily",age:23,id:2},{name:"lucy",age:23,id:3}]
JSON解析:
首先先创建两个需要的实体类Person和Dept。
- package com.qf.bean;
- public class Person {
- private String name;
- private int age;
- 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 [name=" + name + ", age=" + age + "]";
- }
- public Person(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- public Person() {
- super();
- }
- }
- package com.qf.bean;
- import java.util.List;
- public class Dept {
- private int no;
- private String name;
- private List<Person> personList;
- public int getNo() {
- return no;
- }
- public void setNo(int no) {
- this.no = no;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public List<Person> getPersonList() {
- return personList;
- }
- public void setPersonList(List<Person> personList) {
- this.personList = personList;
- }
- @Override
- public String toString() {
- return "Dept [no=" + no + ", name=" + name + ", personList=" + personList + "]";
- }
- public Dept(int no, String name, List<Person> personList) {
- super();
- this.no = no;
- this.name = name;
- this.personList = personList;
- }
- public Dept() {
- super();
- }
- }
1、导包 json-lib.jar
2、使用:解析;生成。
- package com.qf.servlet;
- import java.util.ArrayList;
- import java.util.List;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import org.junit.Test;
- import com.qf.bean.Dept;
- import com.qf.bean.Person;
- public class JsonTest {
- //解析
- @Test
- public void t1() throws JSONException {
- // json字符串
- String json = "{no:1,name:'java',personList:[{name:'王五',age:'20'},"
- + "{name:'王五222',age:'22'},"
- + "{name:'王五333',age:'23'}]}";
- //{开头的是对象,用JSONObject
- JSONObject o = new JSONObject(json);
- //创建Dept实体类
- Dept dept = new Dept();
- dept.setNo(o.getInt("no"));
- dept.setName(o.getString("name"));
- //[开头的personList,数组getJSONArray
- JSONArray a = o.getJSONArray("personList");
- List<Person> list = new ArrayList<>();
- for (int i = 0; i < a.length(); i++) {
- JSONObject o2 = a.getJSONObject(i);
- // 创建对象
- Person p = new Person();
- p.setName(o2.getString("name"));
- p.setAge(o2.getInt("age"));
- list.add(p);
- }
- dept.setPersonList(list);
- System.out.println(dept);
- }
- //生成
- @Test
- public void t2() throws JSONException {
- JSONObject o = new JSONObject();
- o.put("name", "张三");
- o.put("age", 29);
- System.out.println(o);
- //String json = "{person:{name:'李四',age:80}}";
- Person p = new Person();
- p.setName("李四");
- p.setAge(80);
- JSONObject o2 = new JSONObject();
- o2.put("person", p);
- System.out.println(o2);
- }
- }
GSON解析
1、导包 gson-2.2.1.jar
2、解析生成
- package com.qf.bean;
- import java.util.ArrayList;
- import org.junit.Test;
- import com.google.gson.Gson;
- import com.google.gson.reflect.TypeToken;
- import com.qf.bean.Dept;
- import com.qf.bean.Person;
- public class GsonTest {
- //解析
- @Test
- public void t1(){
- String json = "{no:1,name:'java',personList:[{name:'王五',age:'20'},{name:'王五222',age:'22'},{name:'王五333',age:'23'}]}";
- //创建Gson对象
- Gson gson = new Gson();
- //解析对象
- //fromJson()方法 第一个参数:要解析的字符串 第二个参数:结果数据类型.class 字节码文件对象
- Dept dept = gson.fromJson(json, Dept.class);
- System.out.println(dept);
- //解析数组
- String json2 = "['北京','上海','广州']";
- /*
- * 发现解析数组 需要 Type
- * TypeToken 类 它是gson提供的数据类型转换器 可以支持各种的数据类型 集合类型的转换
- * 1.创建TypeToken的子类对象->new TypeToken<ArrayList<String>>(){}
- * 2.调用 getType()方法 返回Type类型
- * */
- ArrayList<String> list = gson.fromJson(json2, new TypeToken<ArrayList<String>>(){}.getType());
- System.out.println(list);
- }
- //生成
- @Test
- public void t2(){
- ArrayList<Person> list = new ArrayList<>();
- for(int i=1;i<3;i++){
- list.add(new Person("张三",20+i));
- }
- //String json = "{no:1,name:'java',personList:[{name:'王五',age:'20'},{name:'王五222',age:'22'}]}";
- Dept dept = new Dept(10001,"html",list);
- //生成json格式字符串
- Gson gson = new Gson();
- String json = gson.toJson(dept);
- System.out.println(json);
- }
- }
FASTJSON解析
1、导包 fastjson-1.2.35.jar
2、解析(static方法JSON调用parseObject)、生成(static方法JSON调用toJSONString)。
- package com.qf.bean;
- import java.util.ArrayList;
- import java.util.List;
- import org.junit.Test;
- import com.alibaba.fastjson.JSON;
- import com.qf.bean.Dept;
- import com.qf.bean.Person;
- public class FastJsonTest {
- //解析
- @Test
- public void t1(){
- //对象
- String json = "{no:1,name:'java',personList:[{name:'王五',age:'20'},{name:'王五222',age:'22'},{name:'王五333',age:'23'}]}";
- //静态方法调用
- Dept dept = JSON.parseObject(json,Dept.class);
- System.out.println(dept);
- //数组
- String json2 = "['背景','广州','天津']";
- //第一个参数 要解析的字符串 第二个参数 泛型的.class 字节码文件对象
- List<String> list = JSON.parseArray(json2, String.class);
- System.out.println(list);
- }
- //生成
- @Test
- public void t2(){
- ArrayList<Person> list = new ArrayList<>();
- for(int i=1;i<3;i++){
- list.add(new Person("张三",20+i));
- }
- Dept dept = new Dept(10002, "ios", list);
- String json = JSON.toJSONString(dept);
- System.out.println(json);
- }
- }