JSON学习总结
文章目录
一、什么是JSON?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
二、JSON的数据结构
2.1 对象
对象是键值对的无序集合,以"{"开始,同时以"}"结束,键值对之间以":"相隔,不同的键值对之间以","相隔。
2.2 数组
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔;值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
三、JAVA后端解析JSON
3.1 Fastjson的使用
3.1.1 序列化
将javaBean对象转换为JSON字符串(也就是在前后端交互中要返回给前端人员的值)
//将List<Map<String,Object>>转化为[{},{},{}]类型的JSON字符串
String json = JSON.toJSONString(mapList);
//Map<String,Object>转化为{}类型的JSON字符串
String json = JSON.toJSONString(map);
//指定日期格式输出JSON字符串
String userJson = JSON.toJSONStringWithDateFormat(userList,"yyyy-MM-dd HH:mm:ss");
//指定日期格式并格式化转换
String userJson = JSON.toJSONStringWithDateFormat(userList,"yyyy-MM-dd HH:mm:ss",SerializerFeature.PrettyFormat);
3.1.2 反序列化
将JSON字符串转换为javaBean对象(也就是前端人员传过来需要我们解析并封装成javaBean的值)
//将userJson转换为User对象
User user1 = JSON.parseObject(userJson,User.classs);
//将[{},{}]类型的字符串转换为集合
List<User> users = JSON.parseArray(userListJson, User.class);
//多态
JSONArray array = JSON.parseArray(userListJson);
JSONObject object =JSON.parseObject(userJson);
3.1.3 JSON的子类
JSON的子类有JSONObject和JSONArray,JSONObject相当于Map<String,Object> ,JSONArray相当于List<Map<String,Object>>,子类重写了JSON类里面的方法。
3.1.4 自己封装的JSON工具类
package com.cetc.test;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.util.ArrayList;
import java.util.List;
public class ConvertJsonUtils {
/**
* 将java对象转换为json格式的字符串
* @param object 带转换的对象
* @return json格式的字符串
*/
public static String toJsonString(Object object){
return JSONObject.toJSONString(object);
}
/**
* 默认日期
* @param object
* @return
*/
public static String toJsonWithDefaultDateFormatString(Object object){
return toJsonWithDateString(object,"yyyy-MM-DD hh:mm:ss");
}
/**
* 带有日期格式的json格式字符串转换
* @param object
* @param format
* @return
*/
public static String toJsonWithDateString(Object object,String format){
return JSONObject.toJSONStringWithDateFormat(object,format, SerializerFeature.PrettyFormat);
}
/**
* 将对象转换为json格式字符串(包括子类的,与toJsonString具体区别可以参考自定义菜单)
* @param object
* @return
*/
public static String toJSONAndChildStr(Object object){
return JSONObject.toJSON(object).toString();
}
/**
* 将json格式的数据转换为java对象(不包括数组,集合类型)
* @param <T>
* @param jsonData json格式的字符串
* @param t 待转换成的java对象
* @return
*/
public static <T> T jsonToJavaObject(String jsonData,Class<T> t){
return JSONObject.parseObject(jsonData, t);
}
/**
* 将json格式的数据转换为java集合对象 ,List集合,map集合
* @param jsonData 待转换的json格式的字符串
* @param t 泛型集合对象
* @return
*/
public static <T> List<T> jsonToJavaList(String jsonData,Class<T> t){
return JSONObject.parseArray(jsonData, t);
}
}
- 3.2 Fastjson的使用
- 3.3 Jackson的使用
- 3.4 json-lib的使用
四、前端解析JSON
//将JSON字符串转化为JSON对象
JSON.parse();
eval("("+json字符串变量+")")
[注]两者的区别是前者会检验JOSN格式是否正确,后者则不会
//将JSON对象转化为JSON字符串
JSON.stringify(json对象)