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. redis底层设计(二)——内存映射数据结构

    我们继续接着上一篇博客,今天来看看内存映射数据结构. 上篇我们讲了内部数据结构,虽然内部数据结构非常强大,但是创建一系列完整的数据结构本身也是一件相当耗费时间的工作,当一个对象包含的元素数量并不多,或 ...

  2. Volley使用

    Volley是常用的网络请求框架,主要的用法如下: 获取字符串: public static void volleyTest1(final Context context){ RequestQueue ...

  3. 网络爬虫之Url含有中文如何转码

    一:背景 今天在使用Jsoup对一个网站进行数据爬取,发现爬取内容为该搜索结果是0条,请求头啥的都填好,利用Chrome开发者工具发现请求Url路径不含中文,抱着试一试的态度,我复制此段非中文参数进行 ...

  4. 剑指offer 第十一天

    46.扑克牌顺子 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的 ...

  5. Jenkins - Extended E-mail配置教程

    前言: 在Jenkins的使用中邮件提醒是一个常用功能,Extended E-mail Notification是一个功能更为齐全,使用也更为复杂的插件,本文即将为大家详细讲解如何配置相关内容,感兴趣 ...

  6. Graph Without Long Directed Paths CodeForces - 1144F (dfs染色)

    You are given a connected undirected graph consisting of nn vertices and mm edges. There are no self ...

  7. net core 端口设置

    在supervisor的启动配置里面增加环境变量: environment=ASPNETCORE_URLS='http://*:5001'

  8. Python之操作redis数据库

    使用redis模块 一.操作redis 1.添加信息 (1)直接建key-value信息: 右键-Add New Key,手动添加key和value 右键-Console,打开控制台,写入命令 (2) ...

  9. semantic-ui 按钮

    1.基础按钮: 使用button.div.span.i等标签,将其class设置为"ui button",显示的就是最基础的按钮样式. <i class="ui b ...

  10. CI框架在控制器中切换读写库和读写库

    CodeIgniter框架版本:3.1.7 ,php版本:5.6.* ,mysql版本:5.6 在Ci框架中,可以在application/config/database.php中配置多个group, ...