java接口fastjson_JSON 走进Java接口测试之fastjson指南 _好机友

新年加入啄木鸟公众号,好运滚滚來!

顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,

主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。

来源:https://www.testwo.com引言

在上文 走进Java接口测试之理解JSON和XML基础 我们介绍了 JSON 的基础知识,本文我们深入研究阿里巴巴的开源 JSON 解析库 fastjson。

什么是fastjson?

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

截止2019/2/1:Github Stars: 16434

Github Forks: 4661

GitHub:https://github.com/alibaba/fastjson/

fastjson的特点

速度快

fastjson 相对其他 JSON 库的特点是快,从 2011 年 fastjson 发布1.1.x版本之后,其性能从未被其他 Java 实现的 JSON 库超越。

使用广泛

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

测试完备

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

使用简单

fastjson 的 API 十分简洁。dtx7gcuhl7.png?w=700

功能完备

支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。

fastjson使用

Maven配置

为了开始使用FastJson,我们首先需要将它添加到我们的 pom.xmlaeq0riwtwx.jpeg?w=700

将Java对象转换为JSON格式

让我们定义以下Person Java beanug9gtmo82y.png?w=700

我们可以使用 JSON.toJSONString() 将 Java 对象转换为 JSON 字符串r81ct9jrxs.jpeg?w=700

这是结果:mzgzocf9z7.png?w=700

我们还可以进一步开始自定义输出并控制排序,日期格式或序列化标志等内容。 例如 - 让我们更新 bean 并添加几个字段:42i5p3dzk0.jpeg?w=700}

以下是我们可以与 @JSONField 注解一起使用的最基本参数列表,以便自定义转换过程:参数格 format 用于正确格式化日期属性

默认情况下,fastjson 库完全序列化Java bean,但我们可以使用参数 -serialize来忽略特定字段的序列化

参数 ordinal 用于指定字段顺序

这是新的输出:rc6fiwvjok.png?w=700

fastjson 还支持非常有趣的 BeanToArray 序列化功能:ow6vzaml2f.png?w=700

这是在这种情况下输出的样子:axp29khd39.png?w=700

完整示例:mi06155ven.jpeg?w=700

创建JSON对象

与其他 JSON 库一样,从头开始创建 JSON 对象非常简单,只需要组合JSONObject 和 JSONArray 对象:oxn6x1538j.jpeg?w=700

以下是输出结果:y6hyvpm654.png?w=700

将JSON字符串解析为Java对象

现在我们知道如何从头开始创建 JSON 对象,以及如何将 Java 对象转换为它们的 JSON 格式,让我们把重点放在如何解析 JSON 格式上:w0pxf9gbbe.jpeg?w=700

我们可以使用 JSON.parseObject() 从 JSON 字符串中获取 Java 对象。 请注意,如果已经声明了自己的参数化构造函数,则必须定义 no-args 或默认构造函数,否则将抛出 com.alibaba.fastjson.JSONException。

这是新创建的对象。kmgbk7b4xb.png?w=700

使用ContextValueFilter配置JSON转换

在某些情况下,我们可能需要更多地控制从 Java 对象到 JSON 格式的转换过程。 在这种情况下,我们可以使用 ContextValueFilter 对象对转换流应用其他过滤和自定义处理:jldavj7ppx.jpeg?w=700

在这个例子中,我们隐藏了 DATE OF BIRTH 字段,通过强制一个常量值,我们也忽略了所有不是 John 或 Doe 的字段:00f7i71cp0.png?w=700

正如你所看到的,这是一个非常基本的示例,当然可以在更复杂的测试场景中使用相同的概念 - 结合 fastjson 在实际项目中提供的这些功能强大且轻量级的工具集。

使用NameFilter和SerializeConfig

fastjson 提供了一组工具来在处理任意对象时自定义 JSON 操作 - 我们没有源码的对象。

让我们假设我们有一个最初在本文中声明的 Person Java bean 的编译版本,我们需要对字段命名和基本格式进行一些增强:jwjgsqard3.jpeg?w=700

我们使用 NameFilter 匿名类声明了 formatName 过滤器来处理字段名称。新创建的过滤器与 Person 类相关联,然后添加到全局实例 - 它基本上是 SerializeConfig 类中的静态属性。 现在我们可以轻松地将对象转换为 JSON 格式,如本文前面所示。

请注意,我们使用了 toJSONStringWithDateFormat() 而不是 toJSONString() 来快速在日期字段上应用相同的格式规则。

这是输出:v7t6btphzm.png?w=700

如你所见 - 字段名称已更改,日期值确实已正确格式化。

将 SerializeFilter 与 ContextValueFilter 相结合可以完全控制任意和复杂Java 对象的转换过程。

小结

在本文中,我们展示了如何使用 fastjson 将Javabean 转换成 JSON 字符串,以及如何反过来。我们还展示了如何使用 fastjson 的一些核心特性来定制 JSON 输出。 fastjson库提供了一个相对简单但仍然非常强大的API,JSON.toJSONString 和 JSON.parseObject 可满足大多数需求。

星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值