Fastjson

2023-11-01

Fastjson 是一个java类库,可以被用来把Java对象转换成Json方式.也可以把Json字符串转换成对应的Java对象.Fastjson可以作用于任何Java对象,包含没有源代码已存在的对象.

目标

  • 在服务器端或是adroid提供一个高性能转换
  • 提供toJSONString() 和 parseObject()简单方法可以在Java对象和Json之前相互转换
  • 允许已存在未修改的对象转换从JSON中转换
  • 支持Java泛型
  • 允许自定义对应的展示
  • 支持任意复杂对象(深层次继承和泛型)

常见问题

1. 怎么获得fastjson?

你可以通过如下地方下载fastjson:

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

android版本

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.1.68.android</version>
</dependency>

2. fastjson主要的API哪些?

fastjson入口类是com.alibaba.fastjson.JSON,主要的API是JSON.toJSONString,和parseObject。

package com.alibaba.fastjson;
public abstract class JSON {
      public static final String toJSONString(Object object);
      public static final <T> T parseObject(String text, Class<T> clazz, Feature... features);
}

序列化:

String jsonString = JSON.toJSONString(obj);

反序列化:

VO vo = JSON.parseObject("...", VO.class);

泛型反序列化:

import com.alibaba.fastjson.TypeReference;

List<VO> list = JSON.parseObject("...", new TypeReference<List<VO>>() {});

3. 哪里找fastjson的使用例子

fastjson的使用例子看这里:https://github.com/alibaba/fastjson/wiki/Samples-DataBind

4. fastjson的性能如何?

fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果看这里:https://github.com/eishay/jvm-serializers/wiki

自行做性能测试时,关闭循环引用检测的功能。

JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect)
VO vo = JSON.parseObject("...", VO.class, Feature.DisableCircularReferenceDetect)

这里有jackson作者cowtowncoder等人对fastjson的性能评价: https://groups.google.com/forum/#!searchin/java-serialization-benchmarking/fastjson|sort:date/java-serialization-benchmarking/uhUAOr1sqn0/5Y56nXKkpVIJ https://groups.google.com/forum/#!topic/java-serialization-benchmarking/8eS1KOquAhw

5. fastjson性能比gson怎样?

fastjson比gson快大约6倍,测试结果上这里:https://github.com/eishay/jvm-serializers/wiki/Staging-Results 。

6. fastjson可以运行在android上么?

fastjson有专门的for android版本,去掉不常用的功能。jar占的字节数更小。git branch地址是:https://github.com/alibaba/fastjson/tree/android 。

7. fastjson序列化的需要像json-lib一样配置java bean的序列化么?

不需要,fastjson的序列化和反序列化都不需要做特别配置,唯一的要求是,你序列化的类符合java bean规范。

8. fastjson如何处理日期

fastjson处理日期的API很简单,例如:

JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss.SSS")

使用ISO-8601日期格式

JSON.toJSONString(obj, SerializerFeature.UseISO8601DateFormat);

全局修改日期格式

JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";
JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);

反序列化能够自动识别如下日期格式:

  • ISO-8601日期格式
  • yyyy-MM-dd
  • yyyy-MM-dd HH:mm:ss
  • yyyy-MM-dd HH:mm:ss.SSS
  • 毫秒数字
  • 毫秒数字字符串
  • .NET JSON日期格式
  • new Date(198293238)

9. 如何定制序列化?

你可以使用SimplePrePropertyFilter过滤字段,详细看这里:https://github.com/alibaba/fastjson/wiki/%E4%BD%BF%E7%94%A8SimplePropertyPreFilter%E8%BF%87%E6%BB%A4%E5%B1%9E%E6%80%A7

关于定制序列化,详细的介绍看这里: https://github.com/alibaba/fastjson/wiki/%E5%AE%9A%E5%88%B6%E5%BA%8F%E5%88%97%E5%8C%96

10. 当对象存在引用时,序列化后的结果浏览器不支持,怎么办?

使用SerializerFeature.DisableCircularReferenceDetect特性关闭引用检测和生成。例如:

String  jsonString = JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);

11. IE 6不支持JSON带中文字符串,要怎么处理?

fastjson提供了BrowserCompatible这个配置,打开之后,所有的中文都会序列化为\uXXXX这种格式,字节数会多一些,但是能兼容IE 6。

String  jsonString = JSON.toJSONString(obj, SerializerFeature.BrowserCompatible);

12. fastjson 如何处理超大对象和超大JSON文本

fastjson提供了Stream API,详细看这里 https://github.com/alibaba/fastjson/wiki/Stream-api

13. 使用@JSONField定制序列化

fastjson提供了使用Annotation定制序列化和反序列化的功能。https://github.com/alibaba/fastjson/wiki/JSONField

14. 将对象中的空值输出

缺省情况下fastjson不输出对象的空值的,如果你需要输出空值,看这里 https://github.com/alibaba/fastjson/wiki/WriteNull_cn

15. 返回较大整数javascript丢失精度问题

当返回的整数大于9007199254740991或者小于-9007199254740991时,在javascript中会丢失精度。此时使用SerializerFeature.BrowserCompatible能自动将数值变成字符串返回,解决精度问题。

Scala中应用

当用到case class时一定要上加上@BeanProperty 做一个javaBean生成get set方法处处理

import scala.beans.BeanProperty
case class StoreGroup(
                                @BeanProperty store_id: String,
                                @BeanProperty link_id: String,
                                @BeanProperty var track_id: String = ""
                              ) 

参考: https://github.com/alibaba/fastjson/wiki 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fastjson 的相关文章

  • 如何使用放心的方式在正文中发送 JsonObject 以进行 post 请求?

    我有一个使用 Google Gson 创建的 JsonObject JsonObject jsonObj gson fromJson response1 json JsonElement class getAsJsonObject 我还对现
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 使用 Exec Maven 插件分叉 Java,而不使用“exec”目标

    来自文档 https www mojohaus org exec maven plugin exec exec在单独的进程中执行程序和Java程序 exec java在同一虚拟机中执行 Java 程序 我想 fork 一个 java 程序
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 我对线程失去了理智

    我想要这个类的对象 public class Chromosome implements Runnable Comparable
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • 如何使用 Java 引用释放 Java Unsafe 内存?

    Java Unsafe 类允许您按如下方式为对象分配内存 但是使用此方法在完成后如何释放分配的内存 因为它不提供内存地址 Field f Unsafe class getDeclaredField theUnsafe Internal re
  • 如何向我的 Spring MVC REST 服务添加错误?

    如果用户没有输入我正在编码的两个名称 我如何更改 更新来自 Spring MVC 的以下 REST 调用以返回错误 未找到 RequestMapping value name method RequestMethod GET Respons
  • getCurrentSession 在网络中休眠

    我正在使用 hibernate 和 jsp servlet 编写一个基于 Web 的应用程序 我读过有关sessionFactory getCurrentSession and sessionFactory openSession方法 我知
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 如何自定义舍入形式

    我的问题可能看起来很简单 但仍然无法得到有效的东西 我需要自定义 Math round 舍入格式或其他格式以使其工作如下 如果数字是 1 6 他应该四舍五入到 1 如果大于或等于 1 7 他应该四舍五入到 2 0 对于所有其他带有 6 的小
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • titledBorder 标题中的图标

    您好 是否可以在 titledBorder 的标题中放置一个图标 例如以下代码 import java awt GridLayout import javax swing JFrame import javax swing JLabel i
  • 如何让 Firebase 与 Java 后端配合使用

    首先 如果这个问题过于抽象或不适合本网站 我想表示歉意 我真的不知道还能去哪里问 目前我已经在 iOS 和 Android 上开发了应用程序 他们将所有状态保存在 Firebase 中 因此所有内容都会立即保存到 Firebase 实时数据

随机推荐

  • Qt打包Debug版本和Release版本(包含到其他电脑打不开,缺库问题等)含msvcp140d.dll,concrt140d.dll,vcruntime140d.dll等发布所需库文件

    首先Debug版本和Release区别 Release是发行版本 比Debug版本有一些优化 文件比Debug文件小 Debug是调试版本 Debug和Release调用两个不同的底层库 Debug是调试版本 包括的程序信息更多 只有Deb
  • C++string字符串查找和替换 string字符串查找和替换

    C string字符串查找和替换 string字符串查找和替换 功能描述 查找 查找指定字符串是否存在 替换 在指定的位置替换字符串 int find const string str int pos 0 const 查找str第一次出现位
  • 操作系统系列(三)——编译和链接

    往期地址 操作系统系列一 操作系统概述 操作系统系列二 进程 本期主题 编译和链接 文章目录 1 被隐藏了的过程 1 1 预编译 1 2 编译 1 3 汇编 1 4 链接 1 模块拼接 静态链接 2 空间地址与分配 3 符号解析和重定位 核
  • Tempter of the Bone【DFS+奇偶剪枝】scanf会WA!!!

    题目链接HDU1010 多好的一道题 交scanf会WA cin一发过 我WA了30 次 惊是这样的BUG 我就说我推的公式怎会错呢 如果有字体缩小的方式 我要把上面那行缩小些 先看大家WA 可真是一道有趣的题目 首先 有这样的图推出奇偶剪
  • spark 基本概念解析

    spark 基本概念解析 1 Application 用户在 spark 上构建的程序 包含了 driver 程序以及在集群上运行的程序代码 物理机器上涉及了 driver master worker 三个节点 2 Driver Progr
  • 4.22/23实习总结:iptables

    文章目录 iptables 是Linux上常用的防火墙管理工具 是netfilter项目的一部分 实现包过滤 NAT功能 1 iptables的四表五链 2 iptables语法 iptables 选项 参数 3 iptables的策略 允
  • ubuntu apt-get 时遇到waiting for headers ——解决方法

    不知为何 当用到apt get 时总是waiting for headers 上网搜寻了解决方法 在这里记录一下 方便自己 方便别人 找到 var cache apt archives partial 目录 进去之后删除里面的东东即可 然后
  • 项目 迁移到新的服务器上,项目迁移到云服务器

    项目迁移到云服务器 内容精选 换一换 源端服务器迁移至华为云后 最终将迁移到弹性云服务器上 因此在迁移前 您需要在华为云中创建一个或多个弹性云服务器 进入 弹性云服务器 页面 关于参数的详细信息 请参见购买弹性云服务器 Windows系统的
  • 多态的基本概念

    多态 多态是指一种事物表现得多种形态 多态分为静态多态和动态多态 多态的特点 1 当父类类型的引用指向子类类型的对象时 父类类型的引用可以直接调用父类独有的方法 Fu fu new Zi int f fu fushow System out
  • 教你做一个属于自己的平衡小车,用STM32F103单片机实现(硬件篇)

    平衡小车软件篇 平衡小车代码篇 目录 一 电机 二 电机驱动 三 陀螺仪 四 OLED显示屏 五 STM单片机 六 其它 七 效果展示 一 电机 如果要做平衡小车不仅需要电机输出PWM来控制小车的行走 还应该适用带编码器的电机 因为要得到小
  • MFC编程实验(二):GDI绘图

    一 实验要求 以窗口中心点为原点 绘制y x2的函数曲线 并在曲线旁边用文字描述 绘制一个红色的圆 并绘制该圆的外切正方形 该正方形填充颜色为蓝色 边线颜色为绿色 二 实验过程 一 绘制y x2的函数曲线 1 利用MFC新建一个基于对单文档
  • unity中Input.GetAxis()用法

    using System Collections using System Collections Generic using UnityEngine public class TransformPointTest MonoBehaviou
  • ElementPlus 修改主题色和暗黑模式切换

    本文讲述根本ElementPlus官方教程配置项目的自定义主题色的两种方法和暗黑模式切换 一 主题配置 方案1 动态设置setProperty 这个方案比较简单 适用于由用户根据颜色面板自行设定各种颜色主题 1 首先定义一个全局的方法 ex
  • 与karma、angular的第一次亲密接触

    首先要了解什么是karma karma干嘛用的 它的好朋友jasmine又是啥 这些文章可以帮助你 karma干嘛的 angular与karma1 angular与karma2 看了以上几篇文章之后 我们基本上就可以启动我们最简单的一个ka
  • H264 NALU 使用PS封装 RTP发送

    最近由于项目平台需求 要将H264 NALU封装为PS再用RTP发送 PS封装按照ISO DEC 13818 1标准 一个PS包包含PS Header PES Header PS system header PS system map等 针
  • VS2019 带参数启动调式程序

    有一些程序需要通过argv传入相应的参数 这类程序在vs中debug的方式为 参数是在 工程属性 调试 命令参数 设置的 默认是空 没有参数 想要加上 如下图所示
  • Anaconda常用命令小结

    在服务器上面使用Anaconda 经常会涉及一些命令 在各种任务之间徘徊 有时会忘记一些命令行 经常也会百度查一下 不如做一个小结 给自己蹭一下流量 1 检验是否安装以及当前conda的版本 conda V 2 创建python虚拟环境 c
  • Tomcat8 WEB-INF更改class后 用manager实现reload

    Tomcat8 更改WEB INF 下的class后 用自带manager实现reload 解决了困扰很长时间的问题 1 适用场景 2 解决思路之一 用tomcat自带manager工具 3 详细步骤 4 官网文档地址 5 不适用情况 解决
  • Vue键盘事件

    键盘事件
  • Fastjson

    Fastjson 是一个java类库 可以被用来把Java对象转换成Json方式 也可以把Json字符串转换成对应的Java对象 Fastjson可以作用于任何Java对象 包含没有源代码已存在的对象 目标 在服务器端或是adroid提供一