FastJSON是一个高性能、功能完善的json序列化和解析工具库,可使用Maven添加依赖

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

一、序列化

FastJSON提供了多个序列化的方法

 1、基本的序列化

String json = JSON.toJSONString(Object object);

2、字符串格式化

String json = JSON.toJSONString(Object object, boolean prettyFormat);    // 当prettyFormat为true
String json = JSON.toJSONString(Object object, SerializerFeature... features)     // 当SerializerFeature为PrettyFormat

3、日期格式化

String json = JSON.toJSONString(new Date());    //
String json = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);    // "2018-03-22 10:30:30"
String json = JSON.toJSONStringWithDateFormat(new Date(), "yyyy-MM-dd");    // "2018-03-22"

4、输出null字段

  默认情况下,FastJSON不输出值为null的字段,可以使用SerializerFeature.WriteMapNullValue使其输出

String json = JSON.toJSONString(Object object, SerializerFeature... features)     // 当SerializerFeature为WriteMapNullValue

5、数字的格式化

Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", 3.3696587);
map.put("key2", "abc"); SerializeConfig serializeConfig = SerializeConfig.getGlobalInstance();
serializeConfig.put(Double.class, new DoubleSerializer("#.##"));
System.out.println(JSON.toJSONString(map)); // {"key2":"abc","key1":3.37}

6、自定义指定类型的格式化

SerializeConfig serializeConfig = new SerializeConfig();
serializeConfig.put(Double.class, new ObjectSerializer() {
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName,
     Type fieldType, int features) throws IOException {
serializer.out.write(String.format("%.2f", (Double)object));
  }
});
System.out.println(JSON.toJSONString(map, serializeConfig)); // {"key2":"abc","key1":3.37}

 详细可参考ObjectSerializer代码中的官方注释

 7、自定义字段输出

保留最外层实体中为null的字段,其他字段忽略

Map<String, Object> map = new HashMap<>();
Map<String, Object> subMap = new HashMap<>();
map.put("hello", "world");
map.put("age", null);
subMap.put("aa", "123");
subMap.put("bb", null);
map.put("sub", subMap); System.out.println(JSON.toJSONString(map, new PropertyFilter() {
@Override
public boolean apply(Object object, String name, Object value) {
if (object == map || value != null) {
return true;
}
else {
return false;
}
}
}, SerializerFeature.WriteMapNullValue)); // {"sub":{"aa":"123"},"hello":"world","age":null}

详细可参考[转]FastJSON通过SerializeFilter定制序列化

二、反序列化

1、简单的反序列化

UserInfo userInfo = JSON.parseObject(json, UserInfo.class);  // 实体可包含泛型字段

2、集合的反序列化

List<UserInfo> tmplist = JSON.parseArray(json, UserInfo.class);

3、泛型的反序列化

List<UserInfo> tmplist = (List<UserInfo>) JSON.parseObject(json, new TypeReference<List<UserInfo>>(){});

4、JSONObject

 JSONObject实现了Map<String, Object>接口,并定义了多个获取指定类型值的方法,当不指定类型时,FastSON默认将对象的解析为JSONObject

JSONObject jsonObject = JSON.parseObject(json); // {"age":21,"name":"matt"}
System.out.println(jsonObject.getString("name"));
System.out.println(jsonObject.getInteger("age"));

 json字段转换为Object对象,每种json类型均转为特定类型

String json = "[3, 3.0,\"abc\"]";
JSONArray jsonArray = JSON.parseArray(json);
for (Object obj : jsonArray) {
System.out.println(obj.getClass().getSimpleName());
}
// 输出为:Integer    BigDecimal    String

5、JSONArray

 JSONArray实现了List<Object>接口,遍历时的对象为Object类型,使用时须强转为JSONObject类型

JSONArray jsonArray = JSON.parseArray(json);    // [{"age":21,"name":"matt"},{"age":15,"name":"kevin"}]
for (Object obj : jsonArray) {
JSONObject jsonObject = (JSONObject) obj;
System.out.println(jsonObject.getString("name"));
}

 6、方法参数的反序列化

 对于方法的参数可能为泛型的情况,可使用parseObject(String json, Type type, Feature... features)实现反序列化

public class Company {
public void printUsers(List<UserInfo> users) {
for (UserInfo userInfo : users) {
System.out.println(String.format("name:%s, age:%d", userInfo.getName(), userInfo.getAge()));
}
}
}
String json = "[{\"name\":\"matt\",\"age\":21},{\"name\":\"kevin\",\"age\":15}]";
Method method = Company.class.getDeclaredMethods()[0];
Type type = method.getGenericParameterTypes()[0];
method.invoke(new Company(), JSON.parseObject(json, type));
// 输出:
// name:matt, age:21
// name:kevin, age:15

参考:

FastJSON 简单使用

fastjson浮点类型显示科学计数法的问题

FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换

[转]FastJSON通过SerializeFilter定制序列化

JSON 解析 (一)—— FastJSON的使用的更多相关文章

  1. Android总结之json解析(FastJson Gson 对比)[申明:来源于网络]

    Android总结之json解析(FastJson Gson 对比)[申明:来源于网络] 地址:http://blog.csdn.net/u014031072/article/details/5392 ...

  2. Android总结之json解析(FastJson Gson 对比)

    前言: 最近为了统一项目中使用的框架,发现项目中用到了两种json解析框架,他们就是当今非常主流的json解析框架:google的Gson 和阿里巴巴的FastJson,为了废除其中一个所以来个性能和 ...

  3. 来自阿里的 json 解析方案 fastjson

    说起Json 解析,有非常多方法,不管是出自Google 的Gson也好,还是来自其它的某某.想必大家都非常熟悉. 今日在github上闲逛.偶遇 一 json 解析库.看起来非常不错,据说是眼下最快 ...

  4. 75、JSON 解析库---FastJson, Gson

    JSON 的简介: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.用于数据转换传输, 通用于PHP,Java,C++,C#,Python等编程语言数据交 ...

  5. Java的Json解析包FastJson使用

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser. ...

  6. Android 中的Json解析工具fastjson 、序列化、反序列化

    Android中通常需要访问服务器,然而服务器返回的数据很多时候都是Json格式 1.fastjson简介 阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备 ...

  7. 阿里的Json解析包FastJson使用

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征: 速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser ...

  8. Json解析包FastJson使用

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser. ...

  9. Json解析之FastJson

    版权声明:转载请注明出处 https://blog.csdn.net/heqiangflytosky/article/details/37659943 1.FastJson介绍 FastJson是阿里 ...

  10. JSON解析工具——fastjson的简单使用

    从官方文档入手: 常见问题与快速上手:https://github.com/alibaba/fastjson/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98 各种使 ...

随机推荐

  1. 理解MySql的锁&事务隔离级别

    这几篇文章是从网上(http://www.hollischuang.com)看到的一系列文章,也是重温了一下数据库的相关知识.下面是对这些文章的一些前后行文逻辑的说明: 我们知道,在DBMS的多个事业 ...

  2. centos 7 java1.8安装

    java安装 检查版本信息,如果版本小于1.8,执行以下命令 java -version java version "1.8.0_144"Java(TM) SE Runtime E ...

  3. [C# ASP.NET]如何让IIS Express支持外部(局域网)连接

    声明:本文为www.cnc6.cn原创,转载时请注明出处,谢谢! 一.搭建环境: 1.系统:Win10 1809 2.IDE:Visual Studio 2017 3.Framework: 4.6.1 ...

  4. ZooKeeper: 简介, 配置及运维指南

    1. 概览 ZooKeeper是一个供其它分布式应用程序使用的软件, 它为其它分布式应用程序提供所谓的协调服务. 所谓的协调服务, 是指ZooKeeper的如下能力 naming 命名 configu ...

  5. Westore 1.0 正式发布 - 小程序框架一个就够

    世界上最小却强大的小程序框架 - 100多行代码搞定全局状态管理和跨页通讯 Github: https://github.com/dntzhang/westore 众所周知,小程序通过页面或组件各自的 ...

  6. socketserver + ftp

    --------------------------------------------生活不止眼前的苟且,还有诗和远方的田野. day 29 socketserver + ftp # # ----- ...

  7. GitHub上README.md编写教程(基本语法)

    一.标题写法: 第一种方法: 1.在文本下面加上 等于号 = ,那么上方的文本就变成了大标题.等于号的个数无限制,但一定要大于0个哦.. 2.在文本下面加上 下划线 - ,那么上方的文本就变成了中标题 ...

  8. 2017百度软研(C++)

    问了很多,不过很多也都没有问到,感觉有点偏,很深入的东西,越问越虚.第一次实习面试从百度开始,也从百度结束吧.看得见的差距,不想将就,所以还是拿最后一次机会去尝试.win or go home, 所以 ...

  9. python-re模块-54

    import re # findall # search # match ret = re.findall('[a-z]+', 'eva egon yuan') # 返回所有满足匹配条件的结果,放在列 ...

  10. Python入门-字符串常用方法

    Python 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可. var1 = 'Hello Worl ...