JSON简介
Json的全称为:JavaScript Object Notation,是一种轻量级的数据交互格式。它基于 ECMAScript (欧洲计算机协会制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。Json作为一种理想的数据交互语言,用于客户端和服务器的数据交互。
JSON就是一串字符串,只不过元素会使用特定的符号标注。
Json格式数据 实际上是JS对象演化而来的{"key":value,"key2":value2...}。
Json数据由 键值对(key:value)组成,键一定是字符串(string)类型,值是任意类型。
JSON 作用
是一种轻量级的数据交换格式,是一种理想的数据交换语言,用于客户端和服务器的数据交互,易于人阅读和编写,也易于机器的解析和生成,同时可以提高网络传输速率。
JSON 的语法规则:JSON 语法是 JavaScript 语法的子集
1、 数组(Array)用方括号("[]")表示。
2、对象(Object)用大括号("{}")表示。
3、 名称/值对(name/value)之间用冒号(":")隔开。
4、 名称(name)置于双引号中(不能用单引号,也不能没有引号),值(value)有:字符串(string)、数值(number)、布尔值(bool:true或false)、null、对象(object)和 数组(array)。
5、 并列的数据之间用逗号(",")分隔,注意两点:
1)- 使用英文的逗号(","),不要用中文的逗号(",")
2)- 最后一个“名称/值对“之后不要加逗号
JSON格式数据定义与解析
1.Json对象
{"key1":value1,"key2":value2}
解析:Json对象.key
2.Json数组
[{},{},{}]
解析:Json数组[索引]
3.混合形式
Json对象和Json数组的相互嵌套
解析:剥洋葱方式 从外到内一层层解析
JSON转换工具:将 Json对象 和 Java对象 互相转换
| Jackson | SpringMVC内置的转换工具 无需依赖外部Jar包,直接在JDK上运行 | 大数据量Json转换速度快,对于复杂数据类型转换没有问题 |
| fastJson | Alibaba提供的转换工具(阿里巴巴) | 转换速度更快,复杂数据类型偶尔转换会出现bug |
| gson | google提供的转换工具(谷歌) | 移动和安卓方面用的比较多 |
Jackson
java对象转json:
1.导入jar包
2.创建ObjectMapper对象
3.调用writeValueAsString(Object obj)方法
json转java对象:
1.导入jar包
2.创建ObjectMapper对象
3.调用readValue(String json,Class clazz)方法
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.bean.User;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*
使用Jackson转换工具完成Java对象和Json数据的转换
1.导入jar包
2.创建核心对象 ObjectMapper
3.调用方法完成操作
*/
public class JacksonTest {
//1.将java对象转为json数据
// {"id":1,"username":"zs","password":"123","email":"zs@qq.com","phone":"13112345678"}
@Test
public void method01() throws JsonProcessingException {
//0.准备一个java对象
User user = new User(1, "zs", "123", "zs@qq.com", "13112345678");
//1.创建ObjectMapper对象
ObjectMapper om = new ObjectMapper();
//2.调用writeValueAsString方法将java对象转为json数据
String json = om.writeValueAsString(user);
System.out.println("json = " + json);
}
//2.将list集合转为json list集合转为json转的是json数组
// [{"id":1,"username":"zs","password":"123","email":"zs@qq.com","phone":"13112345678"},{"id":2,"username":"ls","password":"123","email":"zs@qq.com","phone":"13112345678"},{"id":3,"username":"ww","password":"123","email":"zs@qq.com","phone":"13112345678"}]
@Test
public void method02() throws JsonProcessingException {
//0.准备一个list集合
User user1 = new User(1, "zs", "123", "zs@qq.com", "13112345678");
User user2 = new User(2, "ls", "123", "zs@qq.com", "13112345678");
User user3 = new User(3, "ww", "123", "zs@qq.com", "13112345678");
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
System.out.println("list = " + list);
//1.创建ObjectMapper对象
ObjectMapper om = new ObjectMapper();
//2.调用writeValueAsString方法将list集合转为json数据
String json = om.writeValueAsString(list);
System.out.println("json = " + json);
}
//3.将map集合转为json 转的是混合形式
// {"flag":true,"data":[{"id":1,"username":"zs","password":"123","email":"zs@qq.com","phone":"13112345678"},{"id":2,"username":"ls","password":"123","email":"zs@qq.com","phone":"13112345678"},{"id":3,"username":"ww","password":"123","email":"zs@qq.com","phone":"13112345678"}],"message":"查询成功"}
@Test
public void method03() throws JsonProcessingException {
//0.准备一个map集合
User user1 = new User(1, "zs", "123", "zs@qq.com", "13112345678");
User user2 = new User(2, "ls", "123", "zs@qq.com", "13112345678");
User user3 = new User(3, "ww", "123", "zs@qq.com", "13112345678");
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
Map<String,Object> map = new HashMap<>();
map.put("flag",true);
map.put("message","查询成功");
map.put("data",list);
//1.创建ObjectMapper对象
ObjectMapper om = new ObjectMapper();
//2.调用writeValueAsString方法将map集合转为json数据
String json = om.writeValueAsString(map);
System.out.println("json = " + json);
}
//4.将json数据转为java对象
@Test
public void method04() throws IOException {
//0.准备一个json数据
String json = "{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}";
//1.创建 ObjectMapper对象
ObjectMapper om = new ObjectMapper();
//2.调用readValue方法将json数据转为java对象
User user = om.readValue(json, User.class);
System.out.println("user = " + user);
}
//5.将json数据转为list集合
@Test
public void method05() throws IOException {
//0.准备一个json数据
String json = "[{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":2,\"username\":\"ls\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":3,\"username\":\"ww\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}]";
//1.创建 ObjectMapper对象
ObjectMapper om = new ObjectMapper();
//2.调用readValue方法将json数据转为list集合
List list = om.readValue(json, List.class);
System.out.println("list = " + list);
//如果不想list集合泛型丢失 可以使用TypeReference指定要转换的复杂类型
//jackson里面的TypeReference类 是抽象类,且构造方法使用protected修饰 所以在创建对象时,需要使用匿名内部类
TypeReference<List<User>> reference = new TypeReference<List<User>>() {};
List<User> list2 = om.readValue(json, reference);
System.out.println("list2 = " + list2);
}
//6.将json数据转为map集合
@Test
public void method06() throws IOException {
//0.准备一个json数据
String json = "{\"flag\":true,\"data\":[{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":2,\"username\":\"ls\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":3,\"username\":\"ww\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}],\"message\":\"查询成功\"}";
//1.创建 ObjectMapper对象
ObjectMapper om = new ObjectMapper();
//2.调用readValue方法将json数据转为map集合
Map map = om.readValue(json, Map.class);
System.out.println("map = " + map);
}
}
fastJson
1.导入jar包
java对象转json:JSON.toJSONString(Object obj);
json转java对象:JSON.parseObject(String json,Class clazz);
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.bean.User;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*
使用fastjson转换工具完成Java对象和Json数据的转换
1.导入jar包
2.1:java对象转json:JSON.toJSONString(Object obj);
2.2:json转java对象:JSON.parseObject(String json,Class clazz);
*/
public class FastjsonTest {
//1.将java对象转为json数据
// {"email":"zs@qq.com","id":1,"password":"123","phone":"13112345678","username":"zs"}
@Test
public void method01(){
//1.准备一个java对象
User user = new User(1, "zs", "123", "zs@qq.com", "13112345678");
//2.调用JSON.toJSONString方法
String json = JSON.toJSONString(user);
System.out.println("json = " + json);
}
//2.将list集合转为json list集合转为json转的是json数组
// [{"email":"zs@qq.com","id":1,"password":"123","phone":"13112345678","username":"zs"},{"email":"zs@qq.com","id":2,"password":"123","phone":"13112345678","username":"ls"},{"email":"zs@qq.com","id":3,"password":"123","phone":"13112345678","username":"ww"}]
@Test
public void method02() {
//1.准备一个list集合
User user1 = new User(1, "zs", "123", "zs@qq.com", "13112345678");
User user2 = new User(2, "ls", "123", "zs@qq.com", "13112345678");
User user3 = new User(3, "ww", "123", "zs@qq.com", "13112345678");
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
//2.调用JSON.toJSONString方法
String json = JSON.toJSONString(list);
System.out.println("json = " + json);
}
//3.将map集合转为json 转的是混合形式
// {"flag":true,"data":[{"email":"zs@qq.com","id":1,"password":"123","phone":"13112345678","username":"zs"},{"email":"zs@qq.com","id":2,"password":"123","phone":"13112345678","username":"ls"},{"email":"zs@qq.com","id":3,"password":"123","phone":"13112345678","username":"ww"}],"message":"查询成功"}
@Test
public void method03(){
//1.准备一个map集合
User user1 = new User(1, "zs", "123", "zs@qq.com", "13112345678");
User user2 = new User(2, "ls", "123", "zs@qq.com", "13112345678");
User user3 = new User(3, "ww", "123", "zs@qq.com", "13112345678");
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
Map<String,Object> map = new HashMap<>();
map.put("flag",true);
map.put("message","查询成功");
map.put("data",list);
//2.调用JSON.toJSONString方法
String json = JSON.toJSONString(map);
System.out.println("json = " + json);
}
//4.将json数据转为java对象
@Test
public void method04() {
//1.准备一个json数据
String json = "{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}";
//2.调用JSON.parseObject(String json,Class clazz)方法
User user = JSON.parseObject(json, User.class);
System.out.println("user = " + user);
}
//5.将json数据转为list集合
@Test
public void method05(){
//1.准备一个json数据 【json数组】
String json = "[{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":2,\"username\":\"ls\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":3,\"username\":\"ww\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}]";
//2.调用方法
List list1 = JSON.parseObject(json, List.class);
System.out.println("list1 = " + list1);
//避免泛型丢失 完成复杂数据类型转换 可以使用TypeReference指定要转换的类型
//由于fastjson里面的TypeReference类是普通类,但是构造方式使用protected修饰 因此创建对象时需要使用匿名内部类
TypeReference<List<User>> reference = new TypeReference<List<User>>(){};
List<User> list2 = JSON.parseObject(json, reference);
System.out.println("list2 = " + list2);
//方式三:直接将json转成Object类型
Object parse = JSON.parse(json);
System.out.println("parse = " + parse);
}
//6.将json数据转为map集合
@Test
public void method06(){
//0.准备一个json数据
String json = "{\"flag\":true,\"data\":[{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":2,\"username\":\"ls\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":3,\"username\":\"ww\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}],\"message\":\"查询成功\"}";
//1.调用方法
Map map = JSON.parseObject(json, Map.class);
System.out.println("map = " + map);
}
}
JsonUtils 工具类
import com.alibaba.fastjson.JSON;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class JsonUtils {
/**
* 响应结果
* @param response
* @param obj
* @throws IOException
*/
public static void printResult(HttpServletResponse response, Object obj) throws IOException {
response.setContentType("application/json;charset=utf-8");
JSON.writeJSONString(response.getWriter(),obj);
}
/**
* 把json转成对象
* @param request
* @param tClass
* @param <T>
* @return
* @throws IOException
*/
public static <T> T parseJSON2Object(HttpServletRequest request, Class<T> tClass) throws IOException{
// 把表单数据之间转对象
return JSON.parseObject(request.getInputStream(),tClass);
}
}
本文介绍了JSON(JavaScript Object Notation)的基本概念、作用和语法规则,包括键值对、数组、对象等,并详细讲解了如何利用Jackson和fastJson进行JSON对象与Java对象之间的转换操作。
详解&spm=1001.2101.3001.5002&articleId=122890359&d=1&t=3&u=68ca7fed2c2c43e9bad599dabc1d2fe6)
1327

被折叠的 条评论
为什么被折叠?



