JSON 是一种轻量级易与解析的数据格式,jquery 1.4 以后对 json 格式变严格
格式:{"键":"值 ","键":"值 "},boolean 类型,则不用加 引号
具体形式 :
- Json 以 key-value 的形式存储数据
- Key 的取值 为 String 类型;
- Value 的取值 为 String,boolean,Number,数组,Object,null
- Json 串以{开始,以}结尾
- Json 串中数组是以[开始,以]结尾;
- Json 串中 Object 是以{开始,以}结尾;
解析方式:
单元测试类:
new —> other --->
package com.zyd.po;
public class User {
private Integer useId;
private String name;
private Integer age;
private boolean sex;
public User() {
super();
}
public User(Integer useId, String name, Integer age, boolean sex) {
super();
this.useId = useId;
this.name = name;
this.age = age;
this.sex = sex;
}
public Integer getUseId() {
return useId;
}
public void setUseId(Integer useId) {
this.useId = useId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
}
1. 使用 gson 处理
package com.zyd.test;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import com.google.gson.reflect.TypeToken;
import com.sun.java_cup.internal.runtime.virtual_parse_stack;
import com.zyd.po.User;
public class GsonTest {
/*
* @Test注解 单元测试
* 1.不能有父类
* 2.不能有静态方法
* 3.不能有参数
* 4.返回值是void
*/
@Test
public void test() {
fail("Not yet implemented");
}
/*
* 将对象转换成JSON字符串
*/
@Test
public void testObjectToJson(){
// 得到对象
User user = new User(1,"aa",18,true);
// 得到gson对象
Gson gson = new Gson();
// 将对象转换成JSON字符串
String json = gson.toJson(user);
System.out.println(json);
}
/*
* 将JSON字符串转换成对象
*/
@Test
public void testJSONToObject(){
// 定义JSON字符串
String json = "{\"userId\":1,\"name\":\"zhangsan\",\"age\":18,\"sex\":true}";
//得到gson对象
Gson gson = new Gson();
// 将JSON字符串转换成对象
User user = gson.fromJson(json, User.class);
System.out.println(user.getName());
}
// 将集合转换成json字符串
@Test
public void testListToJson(){
List<String> list = new ArrayList<String>();
list.add("aa");
list.add("bb");
list.add("cc");
//得到json对象
Gson gson = new Gson();
// 将集合转换成JSON字符串
String json = gson.toJson(list);
System.out.println(json);
List<User> userList = new ArrayList<User>();
User user = new User(1, "zhangsan", 18, true);
User user2 = new User(2, "lisi", 19, false);
User user3 = new User(3, "wangwu", 20, true);
userList.add(user);
userList.add(user2);
userList.add(user3);
// 将集合转换成JSON字符串
String json2 = gson.toJson(userList);
System.out.println(json2);
}
/*
* 将JSON字符串转换成集合
*/
@Test
public void testJsonTOList(){
// 定义json对象
String json ="[\"zhangsan\",\"lisi\",\"wangwu\"]";
// 得到gson对象
Gson gson = new Gson();
// 得到JSON字符串转换成集合
List<String> list = gson.fromJson(json, new TypeToken<List<String>>(){}.getType());
}
@Test
public void testMapToJSON(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "aa");
map.put("age", 18);
map.put("sex", true);
// 得到gson对象
Gson gson = new Gson();
String json = gson.toJson(map);
System.out.println(json);
}
/*
* 将JSON字符串转换成map
*/
@Test
public void testJSONToMap(){
String json = "{\"uname\":\"张三\",\"sex\":true,\"age\":18}";
// 得到gson对象
Gson gson = new Gson();
Map<String, Object>map = gson.fromJson(json, new TypeToken<Map<String, Object>>(){}.getType());
System.out.println(map.get("uname"));
}
/*
* JSON节点解析
*/
@Test
public void parse(){
String json = "{\"flag\": true,\"data\": {\"userId\":1,\"name\": \"张三\",\"age\": 18,\"sex\":true }}";
// 得到解析器
JsonParser parser = new JsonParser();
// 得到根节点
JsonElement element = parser.parse(json);
// 得到JSON字符串判断当前json数据类型
JsonObject root = element.getAsJsonObject();
// 解析flag 根据文档判断是boolean类型 基本数据类型
JsonPrimitive primitive = root.getAsJsonPrimitive("flag");
// 将基本数据类型转换成具体的数据类型
boolean flag = primitive.getAsBoolean();
System.out.println(flag);
// 解析data 根据文档判定是对象类型JSONObject
JsonObject data = root.getAsJsonObject("data");
// 将对象转换成具体的对象
User user = new Gson().fromJson(data, User.class);
System.out.println(user.getName());
}
}
package com.zyd.web;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import com.zyd.po.User;
/**
* Servlet implementation class ServletTest
*/
@WebServlet("/test")
public class ServletTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<User> userList = new ArrayList<>();
User use1 = new User(1,"aa",18,true);
User use2 = new User(2,"bb",19,false);
User use3 = new User(3,"cc",20,true);
userList.add(use1);
userList.add(use2);
userList.add(use3);
String json = JSON.toJSONString(userList); //把json对象转换成字符串
response.getWriter().write(json);
}
}
使用fastjson处理:
package com.zyd.test;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.zyd.po.User;
public class FastJsonTest {
@Test
public void test() {
fail("Not yet implemented");
}
@Test
public void testToJson(){
// 得到对象
User user = new User(1,"aa",18,true);
// 将javaBean转换成JSON字符串
String json1 = JSON.toJSONString(user);
System.out.println(json1);
//定义集合
List<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
String json2 = JSON.toJSONString(list);
System.out.println(json2);
//存对象
List<User> userList = new ArrayList<User>();
User u1 = new User(1,"aa",11,true);
User u2 = new User(2,"bb",13,true);
User u3 = new User(3,"cc",15,true);
userList.add(u1);
userList.add(u2);
userList.add(u3);
String json3 = JSON.toJSONString(userList);
System.out.println(json3);
}
@Test
public void testToObject(){
//定义JSON字符串
String json1 ="{\"userId\":1,\"name\":\"zhangsan\",\"age\":18,\"sex\":true}";
User u1 = JSON.parseObject(json1,User.class);
System.out.println(u1.getName());
// 定义json对象
String json2 = "[\"zhangsan\",\"lisi\",\"wangwu\"]";
List<String> list = JSON.parseArray(json2,String.class);
System.out.println(list.get(2));
String json3 = "[{\"age\":18,\"sex\":true,\"name\":\"zhangsan\",\"userId\":1},{\"age\":19,\"sex\":false,\"name\":\"lisi\",\"userId\":2},{\"age\":20,\"sex\":true,\"name\":\"wangwu\",\"userId\":3}]";
List<User> userList = JSON.parseArray(json3,User.class);
System.out.println(userList.get(1).getName());
}
}