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);
}
}