fastjson、jackson以及json-lib的使用
fastjson前言
fastJson是阿里巴巴出品的一个json序列化工具。
引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
对象创建
JSONObject object=new JSONObject();
常用方法
1:public static String toJSONString(Object object)
将对象序列化json字符串;
2:public static String toJSONString(Object object, SerializerFeature... features)
将对象序列化json字符串,并保留类特征,在将json字符串反序列化为对象时,序列化前必须用这个进行方法进行序列化,否则反序列化失败;
3:public static Object parse(String text)
将字符串反序列化为对象,若要反序列化为自己定义的对象,即向下强转,则必须使用ParserConfig.getGlobalInstance().addAccept("com.example.demo.entity.")
进行白名单设置
4:public static JSONObject parseObject(String text)
将json字符串序列化为json对象。
5:public Object put(String key, Object value)
添加键值对。
有的版本toJSONString()方法有问题。
jackson前言
国外著名的json工具。
引入依赖
- jackson-core,核心包,提供基于"流模式"解析的相关 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。
- jackson-annotations,注解包,提供标准注解功能;
- jackson-databind ,数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.4</version>
</dependency>
jackson-databind 依赖 jackson-core 和 jackson-annotations,当添加 jackson-databind 之后, jackson-core 和 jackson-annotations 也随之添加到 Java 项目工程中。在添加相关依赖包之后,就可以使用 Jackson。
创建对象
JsonMapper mapper=new JsonMapper();
常用方法
1:public String writeValueAsString(Object value) throws JsonProcessingException
将对象序列化json字符串;
2:public <T> T readValue(String content, Class<T> valueType)
将字符串转换为对应的对象;
readValue(String content, Class<T> valueType)
方法valueType必须和传入的content键完全对应,否则报错
常用注解
1:@JsonProperty
用于属性,把属性的名称序列化时转换为另外一个名称。示例:
- @JsonProperty("birth_ d ate")
private Date birthDate;
2:@JsonFormat
用于属性或者方法,把属性的格式序列化时转换成指定的格式。示例:
-
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
public Date getBirthDate(); -
备注
JsonFormat注解和下面yml配置配合解决后端传入前端时间格式问题
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
- 前端传入后端时间格式问题
- @DateTimeFormat(pattern = "yyyy-MM-dd")
public Date getBirthDate();
3:@JsonNaming(value = PropertyNamingStrategy.UpperCamelCaseStrategy.class)
用于对象,将属性首字母格式化时转化为大写。示例:
- @JsonNaming(value = PropertyNamingStrategy.UpperCamelCaseStrategy.class)
public class RefundBHRequest implements Serializable {};
如果知道Object的具体对象是谁,可以进行强转,如(QueryRefundNumberRequest)object。
如果不知道,接收到三方返回值一般可以强转为(LinkedHashMap)object。
json-lib前言
Json-lib 是以前 Java 常用的一个 Json 库,最后的版本是 2.4,分别提供了 JDK 1.3 和 1.5 的支持。
引入依赖
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
创建对象
1:JSONObject object=new JSONObject()
: 创建普通的JSONObject对象;
2:JSONArray array=new JSONArray()
:创建数组对象
常用方法
1:JSONObject JSONObject.fromObject(student)
将Map,实体对象转成JSONObject对象;
2:JSONArray JSONArray.fromObject(list)
将List集合转成JsonArray数组对象;
3: public Object put(Object key, Object value)
对对象进行赋值;
4: public Object remove(String key)
根据key值移除key和value;
现已不推荐使用
参考
1.https://www.cnblogs.com/guanbin-529/p/11488869.html
2.https://blog.csdn.net/androidstarjack/article/details/106485213?utm_term=jsonlib不推荐使用&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-2-106485213&spm=3001.4430