11-高性能JSON库——fastjson2

news2024/11/16 13:24:40

目录

1.具体使用

1.1.添加fastjson2依赖

1.2.常用类和方法

1.3.将JSON字符串转换成对象

1.3.1.JSON字符串转换成对象

1.3.2.JSON字符串转换成数组

1.4.将对象转换成JSON字符串

1.4.1.将对象转换成JSON字符串

1.4.2.将数组转换成 JSON 字符串

2.性能测试报告

3.总结


fastjson2 是 fastjson 项目的重要升级,目标是为下一个十年提供一个高性能的 JSON 库,同一套 API 支持JSON/JSONB 两种协议,JSONPath 是一等公民,支持全量解析和部分解析,支持 Java 服务端、客户端Android、大数据场景。

1.具体使用

1.1.添加fastjson2依赖

Maven依赖配置如下:

<dependency> 
    <groupId>com.alibaba.fastjson2</groupId> 
    <artifactId>fastjson2</artifactId> 
    <version>2.0.2</version> 
</dependency>

1.2.常用类和方法

package com.alibaba.fastjson2; 

class JSON { 
    // 将字符串解析成JSONObject 
    static JSONObject parseObject(String str); 

    // 将字符串解析成JSONArray 
    static JSONArray parseArray(String str); 

    // 将字符串解析成Java对象 
    static T parseObject(byte[] utf8Bytes, Class<T> objectClass); 

    // 将Java对象输出成字符串 
    static String toJSONString(Object object); 

    // 将Java对象输出成UT8编码的byte[] 
    static byte[] toJSONBytes(Object object); 
}

class JSONB { 
    // 将jsonb格式的byte[]解析成Java对象 
    static T parseObject(byte[] jsonbBytes, Class<T> objectClass); 

    // 将Java对象输出成jsonb格式的byte[] 
    static byte[] toBytes(Object object); 
} 

class JSONObject { 
    Object get(String key); 
    int getIntValue(String key); 
    Integer getInteger(String key); 
    long getLongValue(String key); 
    Long getLong(String key); 
    T getObject(String key, Class<T> objectClass); 

    // 将JSONObject对象转换为Java对象 
    T toJavaObject(Class<T> objectClass); 
} 

class JSONArray { 
    Object get(int index); 
    int getIntValue(int index); 
    Integer getInteger(int index); 
    long getLongValue(int index); 
    Long getLong(int index); 
    T getObject(int index, Class<T> objectClass); 
}

class JSONPath { 
    // 构造JSONPath 
    static JSONPath of(String path); 

    // 根据path直接解析输入,会部分解析优化,不会全部解析 
    Object extract(JSONReader jsonReader); 

    // 根据path对对象求值 
    Object eval(Object rootObject); 
} 

class JSONReader { 
    // 构造基于String输入的JSONReader 
    static JSONReader of(String str); 

    // 构造基于ut8编码byte数组输入的JSONReader 
    static JSONReader of(byte[] utf8Bytes); 

    // 构造基于char[]输入的JSONReader 
    static JSONReader of(char[] chars); 

    // 构造基于json格式byte数组输入的JSONReader 
    static JSONReader ofJSONB(byte[] jsonbBytes) 
}

1.3.将JSON字符串转换成对象

1.3.1.JSON字符串转换成对象

String str = "{\"id\":123}"; 
JSONObject jsonObject = JSON.parseObject(str); 
int id = jsonObject.getIntValue("id");

1.3.2.JSON字符串转换成数组

String str = "[\"id\", 123]"; 
JSONArray jsonArray = JSON.parseArray(str); 
String name = jsonArray.getString(0); 
int id = jsonArray.getIntValue(1);

1.4.将对象转换成JSON字符串

1.4.1.将对象转换成JSON字符串

class Product { 
    public int id; 
    public String name; 
} 

Product product = new Product(); 
product.id = 1001; 
product.name = "DataWorks"; 

JSON.toJSONString(product);

以上程序执行结果如下:

{ 
    "id" : 1001, 
    "name" : "DataWorks" 
}

1.4.2.将数组转换成 JSON 字符串

JSON.toJSONString(product, JSONWriter.Feature.BeanToArray);

以上程序执行结果如下:

[123, "DataWorks"]

2.性能测试报告

fastjson2、fastjson1 和 jackson 使用 JMH (Java Microbenchmark Harness) 在 JDK 8 和 JDK 11 的测试数据如下:

3.总结

fastjson 2 相比于 fastjson 1 性能大概提升了 200%+,它的目标是成为下一个 10 年的高性能 JSON 操作工具,但如果是老项目将 fastjson 1 升级为 fastjson 2 要慎重一些,因为 fastjson 2 不保证 100% 兼容 fastjson 1。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浪潮发布G2平台

2017年2月28日下午&#xff0c;浪潮在北京粤财JW万豪酒店以“智变”为主题&#xff0c;发布新一代智能存储平台G2&#xff0c;该平台基于统一架构和In系列智能软件设计&#xff0c;在保障”三高”特性满足企业级关键数据存储、处理需求的同时&#xff0c;更强调数据生命周期的智…

第六章 部署WSUS及RDS服务

❄️作者介绍&#xff1a;奇妙的大歪❄️ &#x1f380;个人名言&#xff1a;但行前路&#xff0c;不负韶华&#xff01;&#x1f380; &#x1f43d;个人简介&#xff1a;云计算网络运维专业人员&#x1f43d; 前言 适用范围&#xff1a;Windows Server 2022、Windows Server…

揭密ChatGPT背后团队鲜为人知的小秘密

ChatGPT引领的人工智能技术浪潮还在持续火爆&#xff0c;可是做出这款产品的OpenAI公司&#xff0c;熬得住多年的冷板凳&#xff0c;最终一飞冲天&#xff0c;他们是怎么做到的呢&#xff1f; 因此&#xff0c;我对这家企业的组织建设产生了浓厚的兴趣。我找啊找&#xff0c;最…

游戏开发日志13(利用PlayerPrefs来存储数据)

为游戏设置一个音量键&#xff0c;可以自由选择背景音乐是否开启&#xff0c;并且保存这个设置。 设计了UI如下&#xff1a; 其中BGM为Toggle&#xff0c;其余四个为Button 在canvas&#xff08;set&#xff09;上添加两个脚本&#xff1a;GameMnue&#xff0c;GameManage p…

【备战秋招】每日一题:4月15日美团春招第三题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第三题-交通规划 在线评测链接:P1237 题目内容 塔子哥所在的国家有 n 个城市&#xff0c;这 n 个城市排成一列&#xff0c;按顺序编号为 1,2,3,...,n。然而&#xff0c;由…

【备战秋招】每日一题:4月8日美团春招第五题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第五题-RGP种树 在线评测链接:P1170 题目描述&#xff1a; 塔子哥是一位著名的冒险家&#xff0c;他经常在各种森林里探险。今天&#xff0c;他来到了道成林&#xff0c;…

【Django 网页Web开发】24. 实战项目:moudleForm的文件上传应用到城市管理(17)(保姆级图文)

目录 用户上传文件存放media如何启用1. 在urls.py中进行配置&#xff1a;2. 在settings.py中进行配置&#xff1a;3. 能够通过media的url访问文件 moudleForm上传文件实现城市管理1. moudle.py2. url.py3. city.py4. city.html5. 文件上传小结6. 城市管理效果总结 欢迎关注 『D…

Vivado远程开发探索

平时主要用轻薄本办公&#xff0c;但是有时候又需要用Vivado做一些开发的工作&#xff0c;就感觉生产力不够。如果能在远程的高性能服务器上跑Vivado综合实现就好了。前段时间用ubuntu下安装的Vivado发现有一个Remote Host的设置。所以就准备折腾一下这个。 WSL WSL的安装看官…

chatgpt赋能python:Python怎么调成黑色背景?

Python怎么调成黑色背景&#xff1f; 随着人们对代码编辑器的要求越来越高&#xff0c;许多开发者都喜欢在黑色背景下编写代码。不仅仅是视觉审美方面考虑&#xff0c;黑色背景对眼睛的伤害也比浅色背景要小得多。本篇文章将介绍如何在Python中调整为黑色背景 介绍 默认情况…

[C++刷题之旅]反转链表

&#x1f338;心有所向&#xff0c;日复一日&#xff0c;必有精进 &#x1f338;专栏&#xff1a;C刷题之旅 &#x1f338;作者&#xff1a;早凉 目录 题目一&#xff1a;反转链表 【题目链接】 【题目描述】 【解题思路】 【代码实现】 进阶&#xff1a;链表中指定区间…

【异步】Futurn、FutureTask、CompletionService、CompletableFuture

1. Callable 在这篇文章中 【Thread】线程的基本概念及创建方式&#xff08;一&#xff09;&#xff0c;我们知道创建线程的几种方式。其中&#xff0c;有两个是通过接口来实现的&#xff1a;Runnable、Callable。它们的区别如下&#xff1a; Runnable 接口中的方法是没有返回…

代码审计——XXE详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 XXE&#xff08;XML External Entity Injection&#xff09;是一种针对XML终端实施的攻击&#xff0c;漏洞产生的根本原因就是…

chatgpt赋能python:Python怎么调整行距

Python怎么调整行距 在Python中&#xff0c;我们可以使用不同的方法来调整文本行距。 在这篇文章中&#xff0c;我们将讨论最常用的两种方法&#xff1a;使用文本编辑器和使用Python代码。 使用文本编辑器 许多文本编辑器都具有设置行距的选项。 这通常在“格式”或“段落”…

SpringBoot + Mybatis Plus 实现的瀑布内容管理系统、CMS建站系统

瀑布内容管理系统 瀑布内容管理系统&#xff0c;采用SpringBoot Apache Shiro Mybatis Plus Thymeleaf 实现的内容管理系统(附带权限管理)&#xff0c;是搭建博客、网站的不二之选。 项目介绍 PB-CMS&#xff0c;致力于开发最精简、实用的CMS管理系统&#xff0c;适合搭建…

chatgpt赋能python:Python如何访问手机:探索移动端SEO优化的新途径

Python如何访问手机&#xff1a;探索移动端SEO优化的新途径 随着移动互联网的快速发展&#xff0c;移动端成为了各大搜索引擎的竞争焦点。对于SEO优化工程师而言&#xff0c;探索移动端SEO优化的新途径显得尤为关键。而Python作为一种强大的编程语言&#xff0c;在移动端SEO优…

MM32F3273G8P火龙果开发板MindSDK开发教程21 - PWM的使用

MM32F3273G8P火龙果开发板MindSDK开发教程21 - PWM的使用 1、简述 开发版的LED灯连接PA1脚&#xff0c;而PA1可以映射TIM2_CH2&#xff0c;所以我们用通用定时器2的TIM2_CH2输出PWM到PA1脚&#xff0c;通过更改PWM的占空比&#xff0c;来改变LED的亮度。 2、LED灯的初始化…

读数据压缩入门笔记06_上下文转换

1. 压缩算法可归为两类 1.1. 统计压缩&#xff08;即VLC&#xff09; 1.2. 字典压缩&#xff08;如LZ78&#xff09; 1.3. 从不同的角度利用了给定数据流中存在的统计冗余信息 2. 上下文变换 2.1. contextual transform 2.2. 给定一组相邻的符号集&#xff0c;对它们进行…

代码审计——任意文件下载详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 网站可能提供文件查看或下载的功能&#xff0c;如果对用户查看或下载的文件不做限制&#xff0c;就能够查看或下载任意的文件&…

大数据相关概念了解

Hadoop生态及Hive、HBase、Impala、HDFS之间的关系 Hadoop生态(什么是 Hadoop) Apache Hadoop软件库是一个框架&#xff0c;允许使用简单的编程模型在计算机集群之间对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台计算机&#xff0c;每台计算机都提供本地计算和…

【雕爷学编程】Arduino动手做(112)---2.4G24L01无线模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…