FastJson快速上手【Json解析工具】

目录

一、spring boot工程中引入FastJson依赖

二、调用JSON类的静态方法直接进行json序列化和反序列化

2.1 序列化

2.2 反序列化

三、快速演示:

四、思考

五、web案例demo演示


针对JSON序列化和反序列化,为了方便快捷,我们一般使用json序列化工具进行操作

常见的json序列化工具有Gson和FastJson

FastJson是阿里巴巴开源的项目,号称是速度最快的json解析工具。

以FastJson为例,演示基本使用方法:


一、spring boot工程中引入FastJson依赖

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.79</version>
</dependency>

二、调用JSON类的静态方法直接进行json序列化和反序列化

一般主要用的方法就下面四个~

2.1 序列化

Javabean对象      序列化         成为json字符串
List集合                序列化         成为json字符串
Map集合               序列化         成为json字符串

public static String toJSONString(Object object)

2.2 反序列化

json字符串   反序列化   成为Javabean对象或任意类:

public static <T> T parseObject(String text, Class<T> clazz)

json字符串   反序列化 成为List集合:

public static <T> List<T> parseArray(String text, Class<T> clazz)

json字符串   反序列化 成为Map集合:

public static <T> T parseObject(String text, TypeReference<T> type, Feature... features)

注意:new TypeReference<T>(){}是匿名对象,其泛型应设置为转换后的Map类型。

三、快速演示:

package com.hssy.newcustomer;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.hssy.newcustomer.dto.fastjson.JsonDetailModule;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@SpringBootTest
class NewcustomerApplicationTests {//测试Java对象进行json序列化成json字符串@Testvoid contextLoads() {JsonDetailModule module = new JsonDetailModule();module.setId(2);module.setName("张菲");List<String> hobbys = new ArrayList<>();hobbys.add("唱歌");hobbys.add("书法");hobbys.add("三国演绎");module.setHobby(hobbys);String jsonString = JSON.toJSONString(module);System.out.println(jsonString);
//        {"hobby":["唱歌","书法","三国演绎"],"id":2,"name":"张菲"}}//测试将List集合进行json序列化成json字符串@Testvoid testListToJson(){List<JsonDetailModule> list = new ArrayList<>();for (int i = 0; i < 2; i++) {JsonDetailModule module = new JsonDetailModule();module.setId(i);module.setName("用户:"+ i);List<String> hobbys = new ArrayList<>();hobbys.add("随机爱好:"+(char) (0x4e00 + (int) (Math.random() * (0x9fa5 - 0x4e00 + 1))));hobbys.add("随机爱好:"+(char) (0x4e00 + (int) (Math.random() * (0x9fa5 - 0x4e00 + 1))));module.setHobby(hobbys);list.add(module);}String jsonString = JSON.toJSONString(list);System.out.println(jsonString);//        [{"hobby":["随机爱好:武","随机爱好:畧"],"id":0,"name":"用户:0"},{"hobby":["随机爱好:穊","随机爱好:丠"],"id":1,"name":"用户:1"}]}@Testvoid testMapToJson(){HashMap<String, List<String>> map = new HashMap<>();List<String> hobbys = new ArrayList<>();hobbys.add("唱");hobbys.add("跳");hobbys.add("rap");hobbys.add("篮球");List<String> genders = new ArrayList<>();genders.add("男");genders.add("女");map.put("爱好",hobbys);map.put("性别",genders);String jsonString = JSON.toJSONString(map);System.out.println(jsonString);
//        {"爱好":["唱","跳","rap","篮球"],"性别":["男","女"]}}//测试json字符串反序列化成Java对象@Testvoid testJsonToJava(){String jsonString = "{\"hobby\":[\"唱歌\",\"书法\",\"三国演绎\"],\"id\":2,\"name\":\"张菲\"}";JsonDetailModule jsonDetialModule = JSON.parseObject(jsonString, JsonDetailModule.class);System.out.println(jsonDetialModule);  //JsonDetailModule(id=2, name=张菲, hobby=[唱歌, 书法, 三国演绎])}@Testvoid testJsonToList(){String jsonString = " [{\"hobby\":[\"随机爱好:武\",\"随机爱好:畧\"],\"id\":0,\"name\":\"用户:0\"},{\"hobby\":[\"随机爱好:穊\",\"随机爱好:丠\"],\"id\":1,\"name\":\"用户:1\"}]";List<JsonDetailModule> jsonDetailModules = JSON.parseArray(jsonString, JsonDetailModule.class);System.out.println(jsonDetailModules);
//        [JsonDetailModule(id=0, name=用户:0, hobby=[随机爱好:武, 随机爱好:畧]), JsonDetailModule(id=1, name=用户:1, hobby=[随机爱好:穊, 随机爱好:丠])]for (JsonDetailModule item : jsonDetailModules) {System.out.println(item);}
//            JsonDetailModule(id=0, name=用户:0, hobby=[随机爱好:武, 随机爱好:畧])
//            JsonDetailModule(id=1, name=用户:1, hobby=[随机爱好:穊, 随机爱好:丠])}@Testvoid testJsonToMap(){String jsonString ="{\"爱好\":[\"唱\",\"跳\",\"rap\",\"篮球\"],\"性别\":[\"男\",\"女\"]}";
//        JSONObject jsonObject = JSON.parseObject(jsonString);//使用JSON.parseObject(jsonString)直接进行反序列化是没有泛型的,没有泛型是不安全的集合//我们要求转后的集合必须有泛型//因此,调用parseObject方法,还必须多穿一个TypeReference类型的参数,TypeReference类的泛型中,传递转换后的Map集合Map<String, List<String>> map = JSON.parseObject(jsonString, new TypeReference<Map<String, List<String>>>(){});for (String key: map.keySet()) {System.out.println(key +":--:"+map.get(key));}
//        爱好:--:[唱, 跳, rap, 篮球]
//        性别:--:[男, 女]}}


四、思考

思考:以下二者有什么区别?

redisTemplate.opsForValue().set("user", JSON.toJSONString(user));
redisTemplate.opsForValue().set("user", user.toString());

区别在于存储到 Redis 中的值的类型。

  1. 数据结构:

    JSON.toJSONString() 方法将对象转换为 JSON 格式的字符串,而 user.toString() 只是将 user 对象转换成 String 类型。因此,前者将在 Redis 中存储一个 JSON 对象,后者将在 Redis 中存储一个简单的 String字符串。

  2. Redis 存储结构:

    使用 JSON.toJSONString() 将对象转换为 JSON 字符串,Redis 存储的值类型为 string。存储后取出时需要进行反序列化操作。

    而使用 toString() 将对象转换为 String,Redis 存储的值也是 String 类型。但是其不支持反序列化,即取出来的仍然是 String 类型而不是原对象。

综上所述,如果你要存储一个完整的对象,建议使用 JSON.toJSONString() 将对象转换为 JSON 格式的字符串再存储;如果只需存储一个字符串或字符串拼接的值,那么就两种方式都可以使用。

五、web案例demo演示

序列化

    @ApiOperation(value = "存")@GetMapping("save")public Result<String> t1(){User user = new User();user.setId(1);user.setName("高启强");user.setBirthday(LocalDateTime.now());user.setGender(1);user.setAddress("京海市人民路86号");String substring = UUID.randomUUID().toString().substring(0, 5);redisTemplate.opsForValue().set("user-"+substring, JSON.toJSONString(user));return Result.success("user-"+substring);}

反序列化 

    @ApiOperation(value = "查")@GetMapping("select")public Result<User> t2(String redisKey){String value = redisTemplate.opsForValue().get(redisKey);System.out.println(value);User user = JSON.parseObject(value, User.class);System.out.println(user);return Result.success();}

 

集合序列化

    @ApiOperation(value = "存集合")@GetMapping("saveList")public Result<String> t3(){ArrayList<User> list = new ArrayList<>();for (int i = 0; i < 10; i++) {User user = new User();user.setId(1);user.setName("高启强");user.setBirthday(LocalDateTime.now());user.setGender(1);user.setAddress("京海市人民路86号");list.add(user);}String substring = UUID.randomUUID().toString().substring(0, 5);redisTemplate.opsForValue().set("user-"+substring, JSON.toJSONString(list));return Result.success("user-"+substring);}

  

集合反序列化

    @ApiOperation(value = "查集合")@GetMapping("selectList")public Result<User> t4(String redisKey){String value = redisTemplate.opsForValue().get(redisKey);System.out.println(value);List<User> users = JSON.parseArray(value, User.class);System.out.println(users);return Result.success();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/58415.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图解《狂飙》人物关系

《狂飙》作为今年的开年大戏&#xff0c;一经播出就受到了大家的广泛关注&#xff0c;成为了全民热议的现象级剧集。作为一部扫黑剧&#xff0c;剧中的黑白两派的人物关系可谓错综复杂&#xff0c;不少小伙伴初看时经常搞不清楚出场人物的关系&#xff0c;看得一头雾水。那本期…

[小森数据结构]看电影-顺序表技术精讲

故事前研(言) 小森去看电影<<流浪地球2>>的时候买电影票的场景. 突然一个叫高启强的人买电影票 拉了两个Hei友,来看电影 <<流浪地球2>> 当场就害怕极了&#xff0c;我也知道他想干什么&#xff0c;于是乎就让他到我这里&#xff0c;“高启强”:你小…

【分享贴】项目中为啥总是项目经理一人干着急?

看完了《狂飙》才发现&#xff0c;高启强才是咱项目经理的模范。前段时间身边同事都疯狂安利这部电视剧&#xff0c;但我哪有空余时间刷剧&#xff0c;直到最近才断断续续的追完。这才发现“高启强”这个人物身上有很多闪光点&#xff0c;值得学习借鉴。 他能从一个鱼贩逆袭成…

手捏Java知识点

今天开始面向对象了 面向对象基础 类&#xff1a;由属性和行为组成属性&#xff1a;在类中通过成员变量来体现行为&#xff1a;在类中通过成员方法来体现public class 类名{//成员变量变量1的数据类型 变量1;变量2的数据类型 变量2;...//成员方法方法1;方法2;...}有几个重要的概…

如何优雅地修改同事的代码

前言 互联网开发多以团队协同的方式为主&#xff0c;在实际的开发过程中&#xff0c;我们经常会面对在同事的代码的基础上重新开发的需求。然而由于人员的迭代、需求的变更、文档的缺失等原因&#xff0c;我们贸然修改同事的代码往往需要承担一些额外的开发风险&#xff0c;比如…

Java8 map.getOrDefault()你真的了解吗

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 map.getOrDefault()方法 在Java编程中&#xff0c;Map是一种非常常用的数据结构。Map通常用于存储键值对&#xff0c;其中每个键映射到一个值。当我们尝试访问一个不…

同是打工人,学Python搞副业的朋友跟高启强一样实现逆袭了?

年过完了&#xff0c;现在已经回归工作岗位&#xff0c;接着拧自己的螺丝钉&#xff0c;不过&#xff0c;假期也不算寂寞&#xff0c;追了大热的电视剧《狂飙》。卖鱼小贩高启强的逆袭让我这种打工人太羡慕了&#xff0c;当他坐在白金瀚的办公室里美滋滋的喝着红酒的时候&#…

张杰清唱高启强专属BGM简直就是天作之合,千万别点进来看

张杰清唱高启强专属BGM简直就是天作之合&#xff0c;千万别点进来看&#xff0c;#张杰#BGM#音乐 张杰演唱的《听》狂飙高启强自从出现在抖音上更是火得不可思议&#xff0c;它成为了不少年轻人喜爱的BGM&#xff0c;尤其是用它作为专属BGM的抖音视频更是受到网友的一致好评。 …

老默我想吃鱼了(抽象艺术)

目录 指针地位 代码示例 人物关系 代码分析 总结 指针地位 在C语言中 指针的地位可以说是王中王 代码示例 如下 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main() {int a 15;printf("老默出手前鱼的值:%d\n", a);int* pa &a;*pa 30;p…

冯雷老师:为什么大嫂陈书婷让高启强终生难忘?

高启强对大嫂陈书婷的感情非常深&#xff0c;大嫂死后高启强终生未娶&#xff0c;那为什么大嫂陈书婷让高启强终生难忘呢&#xff1f; 第一、既能助力男人&#xff0c;又识大体懂分寸。在帮助高启强拜泰叔当干爹后&#xff0c;就回归家庭当一个贤妻良母。从不插手老公的生意。…

学术汇报(academic presentation)/PPT应该怎么做?

已经上了研究生两年了&#xff0c;但是一直没有规范过PPT应该怎么做&#xff1f;都是瞎做的&#xff0c;也没有注意过排版什么的&#xff0c;前一段时间被老师批评后&#xff0c;才开始想怎么做好学术汇报&#xff0c;下面将我整理的一些规范和步骤记录下来 一些琐碎的事情&…

阿里、腾讯御用PPT设计师:让你在年终汇报中做最靓的仔!

你知道现在年轻人靠什么赚钱吗&#xff1f; 前几天&#xff0c;知乎上一篇关于“副业”的回答吓我一跳&#xff0c;一个大三学生&#xff0c;只靠副业赚够14W。 14万什么概念&#xff0c;是一个普通白领不吃不喝至少2年的工资。 干什么能一下赚这么多&#xff1f; 他一没抢钱二…

ChatGPT中的提示工程(Prompt Engineering)怎么做?50页最新PPT下载

整理自&#xff1a;专知 在公众号后台回复 Prompt Engineering 即可获取PPT。 ChatGPT爆火之后&#xff0c;也逐渐衍生出一大堆新的概念和机会。提示工程&#xff08;Prompt Engineering&#xff09;便是其中之一。据笔者所知&#xff0c;国内外目前已有提示工程相关的工程师岗…

用 ChatGPT 将 Excel 工作效率提高 10 倍!离做PPT还远吗

源&#xff5c;机器之心 在未来&#xff0c;精通 Excel 或许不再是简历亮点了。 ChatGPT 自去年 11 月 30 日 OpenAI 重磅推出以来&#xff0c;这款 AI 聊天机器人迅速成为 AI 界的「当红炸子鸡」。一经发布&#xff0c;不少网友更是痴迷到通宵熬夜和它对话聊天&#xff0c;就为…

招银网络科技 笔试、面试

1. 笔试 1.1 题目 有16种状态码分别是1-16&#xff0c;本来应该记为{1, 1, 1, 3}&#xff0c;但是由于粗心记为{1113}&#xff0c;题目&#xff1a;求出给定的输入如{1113}能够构成不同状态码的个数。{1113}可以构成{1, 1, 1, 3}, {11, 1, 3}, {1, 11, 3}, {1, 1, 13}, {11, …

招商银行网点管理系统

目录 功能一&#xff1a;查询所有展示 1.根据城市来进行条件查询 2.当进入首页后显示所有网点信息 3.根据城市进行条件查询 功能二&#xff1a;新增网点 功能三&#xff1a;修改网点 功能四&#xff1a;删除功能 功能一&#xff1a;查询所有展示 1.根据城市来进行条件查…

独家 | 招商银行:玩转校园招聘新方式 挖掘金融科技新人才

数字经济时代&#xff0c;金融科技人才队伍的引进与培养是招商银行人才体系建设的关键任务。 01.金融科技校招2大核心课题 招商银行数字化转型过程中&#xff0c;线上化、生态化、平台化、智能化、数据化全面加速发展&#xff0c;对人才队伍能力提出新要求。 2大核心课题&am…

【招商银行数据方向笔试题】—— 信用卡推荐客户列表

题目&#xff1a; 现在信用卡开展营销活动&#xff0c;持有我行信用卡客户推荐新户办卡&#xff0c;开卡成功后可获得积分奖励。规定每个客户最多可推荐两个新户且一个新户只能被推荐一次。但允许链接效应&#xff0c;即若客户A推荐了新户B&#xff0c;新户B推荐新户C&#xff…

金融银行测试面试题分享

1、网上银行转账是怎么测的&#xff0c;设计一下测试用例。 回答思路&#xff1a; 宏观上可以从质量模型&#xff08;万能公式&#xff09;来考虑&#xff0c;重点需要测试转账的功能、性能与安全性。设计测试用例可以使用场景法为主&#xff0c;先列出转账的基本流和备选流。…

CNAPS Code 查询(招商银行)

招商银行的妹子实在太傻了&#xff0c;根本不知道什么是CNAPS Code、联行号&#xff0c;完全答非所问。 最后还是自己搞定了&#xff0c;如图: 最后再看看招行人员的英语水平&#xff0c;真是不知道什么是东西&#xff1a; 我的群&#xff1a;1、Cocos2D&Unity&Java程序…