JSON语法及解析

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值