FastJson
一、基本概念
1.json数组格式 ["1","2",'3"]
用索引访问---【下标】
2.json对象 {"key1":"v1","key2":"v2"}
json的对象格式:
*大括号包裹,定义键值对,键必须是宇符串类型,值的数据类型不限制
*键值对之问,是冒号分开
*每个键值对之问,逗号分开
两者可相互嵌套
二、其他转json字符串--也叫序列化
1.java对象转json字符串,调用JSON.toJsonString($java对象)方法
2.list集合转json字符串,调用JSON.toJsonString($list集合)方法
3.map集合转json字符串,调用JSON.toJsonString($map集合)方法
问题:map转为字符串以后是{}格式,还可以通过get访问里面的值吗
答:不能,json是字符串,是String类型,需要进行反序列化。相当于快递被包裹起来了,要访问要拆包
三、json字符串转其他--反序列化
以下都调用JSON的静态方法
1.json字符串转java对象
parseObject()源码:
public static <T> T parseObject(String text, Class<T> clazz) {return parseObject(text, clazz);}
2.json字符串转list集合
3.json字符串转map集合
Exception in thread "main" java.lang.ClassCastException: class com.alibaba.fastjson.JSONObject cannot be cast to class org.jsonTest.Student (com.alibaba.fastjson.JSONObject and org.jsonTest.Student are in unnamed module of loader 'app')
使用new TypeReference<>,然后在TypeReference里面写map的泛型
3.1其他方法-用ObjectMapper
import com.fasterxml.jackson.databind.ObjectMapper;try {Map<String, Object> message = new HashMap<>();message.put("type", "refreshType");message.put("timestamp", System.currentTimeMillis());message.put("source", "gateway");ObjectMapper objectMapper = new ObjectMapper();String jsonMessage = objectMapper.writeValueAsString(message);System.out.println(jsonMessage);} catch (Exception e) {System.out.println("广播配置刷新消息失败: {}");}
JSON和JSONObject的toJSONString()
区别
具体见我的另一篇博客Java--json与map,colloct与流-CSDN博客
-
JSON.toJSONString
:是 Fastjson 库的全局、静态核心方法。它是一个“聪明”的工具,可以自动分析和序列化任何Java对象。 -
JSONObject.toJSONString
:是JSONObject
这个特定类的实例方法。它通常用于将一个已经是JSONObject
的对象再转换回字符串,功能上是JSON.toJSONString
的一个子集。
1.JSON调用
-
作用:将任意一个Java对象(POJO, Map, List, 数组,基本类型,
JSONObject
等)序列化成JSON字符串。 -
工作原理:它非常智能。当你传入一个对象时,它会通过反射分析这个对象的类型和结构,然后根据其字段、Getter方法或Map的键值对来构建JSON字符串。
-
适用场景:几乎任何情况。尤其是当你有一个普通的Java对象(POJO)或者一个复杂的嵌套结构需要转换时。
// 序列化一个普通Java对象
User user = new User("John", 30);
String jsonStr1 = JSON.toJSONString(user); // {"name":"John","age":30}// 序列化一个Map
Map<String, Object> map = new HashMap<>();
map.put("key", "value");
String jsonStr2 = JSON.toJSONString(map); // {"key":"value"}// 序列化一个List
List<String> list = Arrays.asList("a", "b", "c");
String jsonStr3 = JSON.toJSONString(list); // ["a","b","c"]// 它当然也可以序列化一个JSONObject
JSONObject jsonObj = new JSONObject();
jsonObj.put("k", "v");
String jsonStr4 = JSON.toJSONString(jsonObj); // {"k":"v"}
2.JSONObject调用
-
来源:
com.alibaba.fastjson.JSONObject
类的实例方法(一个JSONObject
本质上就是一个实现了Map
接口的类)。 -
作用:将 当前
JSONObject
实例中包含的键值对数据序列化成JSON字符串。 -
工作原理:因为它本身就是一个KV结构(类似于Map),所以它的序列化过程很简单,就是遍历自己内部的所有键值对并拼接成字符串。它不需要反射去分析,因为它知道自己是什么。
-
适用场景:主要用于你已经有一个
JSONObject
实例,并且想把它转换成字符串。你不能用它来直接序列化一个普通的Java对象。
import com.alibaba.fastjson.JSONObject;// 创建一个JSONObject并填充数据
JSONObject jsonObj = new JSONObject();
jsonObj.put("name", "John");
jsonObj.put("age", 30);// 使用实例方法将这个JSONObject自身转换为字符串
String jsonStr = jsonObj.toJSONString(); // {"name":"John","age":30}// ---------------- 错误用法 ----------------
User user = new User("John", 30);
/** String errorJsonStr = user.toJSONString(); // 编译错误!User类没有toJSONString方法你必须使用 JSON.toJSONString(user) */
简单来说就是静态类方法和实例方法的区别!!!