当前位置:网站首页 > Java教程 > 正文

java 中用json 教程



参考:https://www.runoob.com/w3cnote/fastjson-intro.html

Json类库选择:Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。下面是几个常用的 JSON 解析类库:
Gson:谷歌开发的JSON库,功能十分全面。
FastJson:阿里巴巴开发的JSON库,性能十分优秀。
Jackson:社区十分活跃且更新速度很快。

Fastjson是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。
源码地址:https://github.com/alibaba/fastjson Fastjson
中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN

Fastjson特性

  • 提供服务器端、安卓客户端两种解析工具,性能表现较好。
  • 提供了 toJSONString() 和 parseObject() 方法来将 Java 对象与 JSON 相互转换。调用toJSONString()方法即可将对象转换成 JSON 字符串,parseObject() 方法则反过来将 JSON 字符串转换成对象。
  • 允许转换预先存在的无法修改的对象(只有class、无源代码)。
  • Java泛型的广泛支持。
  • 允许对象的自定义表示、允许自定义序列化类。
  • 支持任意复杂对象(具有深厚的继承层次和广泛使用的泛型类型)。

FastJson使用:

可以在 maven 中央仓库中直接下载:http://repo1.maven.org/maven2/com/alibaba/fastjson/

通过Maven依赖使用:

 

其中 1.2.47 是版本号,根据需要使用特定版本,建议使用最新版本。

FastJson类库中最基本的类和方法定义:

JSON类在com.alibaba.fastjson.JSON包中。

JSON类提供了多种 Java对象<->JSON字符串 直接互相转换的方法。

JSON.parseObject():从字符串解析 JSON 对象。
JSON.parseArray():从字符串解析 JSON 数组。
JSON.toJSONString(obj/array):将 JSON 对象或 JSON 数组转化为字符串。

 

//从字符串解析JSON数组

 

//将JSON对象转化为字符串

 

//将JSON数组转化为字符串

 

JSON类中主要常用方法定义

 

JSONObject类在com.alibaba.fastjson.JSONObject包中。

 

JSONArray类在com.alibaba.fastjson.JSONArray包中。

 

样例:

 

使用JSON.toJSONString()将Java对象转换换为JSON字符串:

 

输出结果为:

 

我们还可以自定义输出,并控制字段的排序、日期显示格式、序列化标记等。接下来我们更新bean并添加几个字段:

 

以上代码中我们列出了基本参数类别,并使用 @JSONField 注解,以便实现自定义转换:

  • format参数用于格式化Data的属性。
  • serialize参数指定字段不序列化。默认情况下,FastJson库可以序列化Java bean实体,但可以使用serialize指定字段不序列化。
  • ordinal参数指定字段的顺序。
    输出结果为:
 

使用JSONObject和JSONArray创建JSON对象。
JSONObject和JSONArray继承了JSON,可以直接使用两者对“JSON字符串”与“JSON对象” 及java Bean之间做转换,不过为了避免混淆,我们还是建议使用JSON的toJSONString()方法

使用继承的toJSONString()方法样例:

 

输出结果为:

 

@JSONField 的作用对象:

  • Field
  • Setter和Getter方法
    注意:FastJson 在进行操作时,是根据Getter和Setter 的方法进行的,并不是依据 Field 进行。
    注意:若属性是私有的,必须有set方法。否则无法反序列化。

JSONField定义:

 

@JSONField 配置方式:

  1. 配置在 field 上
 
  1. 配置在 getter/setter 上
 
  1. 使用format配置日期格式化
 
  1. 使用serialize/deserialize指定字段不序列化/反序列化
 
  1. 使用ordinal指定字段的顺序
    默认fastjson序列化一个java bean,是根据 fieldName 的字母序进行序列化的,你可以通过 ordinal 指定字段的顺序。这个特性需1.1.42以上版本。
 
  1. 不返回null字段数据
    在相关对象的类上添加 @JsonInclude 注解,设定值为 NON_NULL
 

则HTTP Response返回的该类的对象的JSON数据如下所示,无为null的字段

 
  1. 返回null字段数据
    在相关对象的类上添加 @JsonInclude 注解,设定值为 ALWAYS
 

则HTTP Response返回的该类的对象的JSON数据如下所示,其中包含null的字段

 

@JsonInclue注解不设定值的情况下,默认使用 ALWAYS。

实例:

 

在上例中,首先从 JSON 格式的字符串中构造一个 JSON 对象,之后依次读取字符串、整数、布尔值以及数组。打印结果如下:

 
  1. 实例:
 
  • 注意:反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常:com.alibaba.fastjson.JSONException: default constructor not found.
 
 

(1)JSONArray的方法

 

在某些场景下,对Value做过滤,需要获得所属JavaBean的信息,包括类型、字段、方法等。在fastjson-1.2.9中,提供了ContextValueFilter,类似于之前版本提供的ValueFilter,只是多了BeanContext参数可用。

 

以上实例中我们隐藏了 DATE OF BIRTH 字段,并过滤名字不包含John的字段:

 
  • NameFilter: 序列化时修改 Key。
  • SerializeConfig:内部是个map容器主要功能是配置并记录每种Java类型对应的序列化类。
 

注意我们使用的是 toJSONStringWithDateFormat() 而不是 toJSONString() ,它可以更快速的格式化日期。输出结果:


                            

版权声明


相关文章:

  • java 入门教程目录2025-01-09 10:58:02
  • 动力节点 java教程2025-01-09 10:58:02
  • java极速入门教程2025-01-09 10:58:02
  • java报表导出excel视屏教程2025-01-09 10:58:02
  • 学java的教程2025-01-09 10:58:02
  • java实战项目教程2025-01-09 10:58:02
  • java166教程2025-01-09 10:58:02
  • java讲师视频教程2025-01-09 10:58:02
  • java分解视频教程2025-01-09 10:58:02
  • 小黑塔制作教程java2025-01-09 10:58:02