FastJson——JSO字符串与对象的相互转化

news/2024/9/23 9:36:17/

一、FastJson介绍

​ Fastjson是阿里巴巴的开源SON解析库它可以解析JSON格式的字符串,支持将java Bean序列化为ISON字符串,也可以从JSON字符串反序列化到JavaBean。

Fastjson的优点

  • 速度快
    fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.版本之后其性能从未被其他ava实现的]SON库超越

  • 使用广泛
    fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一

  • 测试完备
    fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定

  • 使用简单
    fastison的API十分简洁

  • 功能完备
    支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展

二、FastJson序列化 API

序列化: 将Java对象转换成JSON格式字符串的过程。

2.1 JSON对象转换成字符串

使用 JSON.toJSONString(Object object); 方法

public class ObjectToJSON {public static void main(String[] args) {Student student = new Student("张三",20,"北京市","zhangjinfqi@qq.com");String jsonString = JSON.toJSONString(student);System.out.println(jsonString);}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {private String name;private Integer age;private String address;private String email;
}

image-20230403171538032

2.2 List集合转换成JSON对象

使用 JSON.toJSONString(Object object); 方法

Student student1 = new Student("张三",20,"北京市","zhangjinfqi@qq.com");
Student student2 = new Student("张三",20,"北京市","zhangjinfqi@qq.com");
Student student3 = new Student("张三",20,"北京市","zhangjinfqi@qq.com");
Student student4 = new Student("张三",20,"北京市","zhangjinfqi@qq.com");ArrayList<Student> list = new ArrayList<>();
list.add(student1);
list.add(student2);
list.add(student3);
list.add(student4);
String jsonString = JSON.toJSONString(list);
System.out.println(jsonString);

image-20230403172132984

2.3 Map集合转换成JSON对象

Map<String, Student> map = new HashMap<>();
Student student1 = new Student("张三", 20, "北京市", "zhangjinfqi@qq.com");
Student student2 = new Student("张三", 20, "北京市", "zhangjinfqi@qq.com");
Student student3 = new Student("张三", 20, "北京市", "zhangjinfqi@qq.com");
Student student4 = new Student("张三", 20, "北京市", "zhangjinfqi@qq.com");
map.put("1",student1);
map.put("2",student2);
map.put("3",student3);
map.put("4",student4);
String jsonString = JSON.toJSONString(map);
System.out.println(jsonString);

image-20230403172608170

三、FastJSON反序列化

将JSON格式的字符串转换成Java对象

3.1 JSON字符串转Object对象

JSON.parseObject(JSON字符串, 要转换成的类.class);

        String jsonString = "{\"address\":\"北京市\",\"age\":20,\"email\":\"zhangjinfqi@qq.com\",\"name\":\"张三\"}";
//        第一个参数传入JSON字符串,第二个参数传入我们要转换成的对象的类Student student = JSON.parseObject(jsonString, Student.class);System.out.println(student);

image-20230403173718274

3.2 JSON字符串转List集合

JSON.parseArray(json格式字符串, 传递转换后的集合的泛型);
        String jsonString = "[{\"address\":\"北京市\",\"age\":20,\"email\":\"zhangjinfqi@qq.com\",\"name\":\"张三\"},{\"address\":\"北京市\",\"age\":20,\"email\":\"zhangjinfqi@qq.com\",\"name\":\"张三\"},{\"address\":\"北京市\",\"age\":20,\"email\":\"zhangjinfqi@qq.com\",\"name\":\"张三\"},{\"address\":\"北京市\",\"age\":20,\"email\":\"zhangjinfqi@qq.com\",\"name\":\"张三\"}]";
//         第一个参数传递JSON格式字符串,第二个参数传递转换后的集合的泛型List<Student> studentsList = JSON.parseArray(jsonString, Student.class);System.out.println(studentsList);

image-20230403174042963

3.3 JSON字符串转Map集合

        String jsonString = "{\"1\":{\"address\":\"北京市\",\"age\":20,\"email\":\"zhangjinfqi@qq.com\",\"name\":\"张三\"},\"2\":{\"address\":\"北京市\",\"age\":20,\"email\":\"zhangjinfqi@qq.com\",\"name\":\"张三\"},\"3\":{\"address\":\"北京市\",\"age\":20,\"email\":\"zhangjinfqi@qq.com\",\"name\":\"张三\"},\"4\":{\"address\":\"北京市\",\"age\":20,\"email\":\"zhangjinfqi@qq.com\",\"name\":\"张三\"}}";
//      直接进行反序列化,Map集合是没有泛型的,也是可以正常输出的,但是没有泛型的集合是不安全的集合
//        Map map = JSON.parseObject(jsonString);//        下面掉用户parseObject,传递参数TypeReference类型,在TypeReference的泛型中传递转后的Map集合即可
//         {}是什么意思?   因为TypeReference的构造方法是protected修饰的,只有子类才能调用,但是我们现在不是他的子类,在后面加{}让其在这成为匿名内部类,匿名内部类就是该类的子类对象Map<String, Student> map = JSON.parseObject(jsonString, new TypeReference<Map<String, Student>>() {});System.out.println(map);

image-20230403175356986


http://www.ppmy.cn/news/38632.html

相关文章

就算摆个地摊,也要分析一下竞争环境

就算摆个地摊&#xff0c;也要分析一下竞争环境 趣讲大白话&#xff1a;忽视竞争环境&#xff0c;商业设计太嫩 【趣讲信息科技124期】 **************************** 需求和供给是市场的核心矛盾 马克思说的经济危机&#xff0c;就是生产过剩 大中国已经把生产能力冲到了顶 物…

《阿德勒心理学》笔记

赋予过去什么样的价值&#xff0c;是我们现在的课题 目的论 生活方式 现状的不满 改变的不安 勇气 追求优越 自卑感 自卑情节 越自负的人越自卑 一切烦恼均来自人际关系 苦于强烈的自卑感&#xff0c;却没有勇气通过努力或成长之类的健全手段去进行改变&#xff0c;又无法忍受因…

《统计学习方法》学习笔记之第二章:感知机

目录 第一节 模型介绍和学习策略 模型介绍 学习策略 第二节 梯度下降法 概念 算法 梯度下降法&#xff1a;例子 原理 第三节 学习算法之原始形式 学习问题 原始形式 例题分析 第三节 学习算法之对偶形式 对偶形式 例题分析 第四节 原始形式算法的收敛性 第一节 模…

高级Java工程师面试题经典面试题1220道(附答案)

人人都想进大厂&#xff0c;当然我也不例外。早在春招的时候我就有向某某某大厂投岗了不少简历&#xff0c;可惜了&#xff0c;疫情期间都是远程面试&#xff0c;加上那时自身也有问题&#xff0c;导致屡投屡败。突然也意识到自己肚子里没啥货&#xff0c;问个啥都是卡卡卡卡&a…

Spring《二》bean的实例化与生命周期

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 上一篇&#xff1a;Spring《一》快速入门 下一篇&#xff1a;Spring《三》DI依赖注入 目录一、bean实例化&#x1f34d;1.构造方法 ***2.静态工厂 *使用工厂创建对象实例化bean3.实例工厂 ***使用示例工厂创建对象实…

JavaScript中的Object.assign与Getter,Setters 和 definePropert使用

本文介绍关于JavaScript中操作元素对象的Object.assign与Getter,Setters &#xff0c;definePropert方法。通过对这些概念的理解&#xff0c;能帮助大家更好的理解在JavaScript中项目开发中我们是如何使用这些概念。这些基础概念也是现代JavaScript开发中必知必会的知识点&…

node-red 的 devops平台 FlowForge 特性简介,有什么用处

前言 上一篇文章,我们简单了解了一下flowforge这个平台,它是用来弥补node-red的不足,一个社区的多租户,devops平台。并且介绍了为什么要使用flowforge。那么本篇文章就来讲解一下这个平台的特性。 特性 首先flowforge是一个开源的平台,仓库地址 https://github.com/flo…

云原生简介

云原生是一种软件开发方法&#xff0c;旨在充分利用云计算的优势。了解此首选平台的原理。 介绍 云计算彻底改变了企业的运营方式&#xff0c;使他们能够按需大规模访问计算资源。云已成为运行应用程序和服务的首选平台&#xff0c;公司利用其灵活性、可扩展性和成本效益在当今…