当前位置: 首页 > web >正文

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) */

简单来说就是静态类方法和实例方法的区别!!!

http://www.xdnf.cn/news/19927.html

相关文章:

  • 技术框架之脚手架实现
  • .vsdx文件转pdf、word、ppt等文件在线分享(免费版)
  • Linux的墙上时钟和单调时钟的区别
  • Flutter环境搭建全攻略之-Macos环境搭建
  • Android 中自定义控件实现 AppCompatSpinner 功能
  • 面试复习题-Flutter场景题
  • 数据结构:双向链表
  • 题解:UVA1589 象棋 Xiangqi
  • 基于 CC-Link IE FB 转 DeviceNet 技术的三菱 PLC 与发那科机器人在汽车涂装线的精准喷涂联动
  • Augmentcode免费额度AI开发WordPress商城实战
  • 【全面指南】Claude Code 从入门到精通:安装、配置、命令与高级技巧详解
  • 一个线程池的工作线程run函数的解析
  • Docker 学习笔记
  • 52DH Pro网址导航系统开源版
  • 泰酷辣!我的头像被「移乐AI头像」‘爆改’成顶流了!免费快来薅!
  • 【FastDDS】Layer DDS之Domain (01-overview)
  • 深度学习之第六课卷积神经网络 (CNN)如何保存和使用最优模型
  • 因果机器学习热度攀升,成顶会顶刊 “加分项”,想发论文就认准它!
  • 苍穹外卖项目实战(日记十四)-记录实战教程及问题的解决方法-(day3课后作业) 菜品停售启售功能
  • 机器视觉中为什么优先选择黑白相机?
  • 【Linux】为什么死循环卡不死 Linux?3 个核心逻辑看懂进程优先级与 CPU 调度密码
  • 性能测试-jmeter9-直连数据库
  • 苍穹外卖项目笔记day03
  • 从0 死磕全栈第3天:React Router (Vite + React + TS 版):构建小时站实战指南
  • 机器学习-逻辑回归
  • raspberry Pi 4B(树莓派4B)开启VNC服务 主机用VNC连接
  • 14、Docker构建后端镜像并运行
  • 关于SPI串口spidev接收数据不完整的问题
  • Moonchain:「新加坡大华银行」加持下连接现实金融与链上经济的价值通道
  • 大数据毕业设计选题推荐-基于大数据的电信客户流失数据分析系统-Hadoop-Spark-数据可视化-BigData