# JSON 序列化
MornBoot提供JSON格式的序列化/反序列化组件,使开发人员不必关注业务框架中使用的是哪一款JSON库,MornBoot会自动选择可支持的JSON库运行,即使业务框架中集成了多套JSON库,MornBoot也能良好运行。
Since:v1.2.1
当前支持:
- FastJson
- Jackson
适用场景:
- 编写业务框架,需要支持多种JSON库
- 编写项目代码,不清楚JSON库之间的优劣
- 用FastJson的API调用灵活配置的Jackson
# Maven Dependency
<!--自动化配置-->
<dependency>
<groupId>site.morn.boot</groupId>
<artifactId>morn-boot-autoconfigure</artifactId>
<version>${morn.version}</version>
</dependency>
<!--JSON-->
<dependency>
<groupId>site.morn.boot</groupId>
<artifactId>morn-boot-json</artifactId>
<version>${morn.version}</version>
</dependency>
注意:MornBoot默认没有主动加载任何JSON库,因此必须额外引入
FastJson
/Jackson
的依赖。如果项目中已经集成了JSON库,则不用关注。
# Global Utils
JsonParsers
的用法非常基础,不作赘述。JsonParsers
会使用FastJson
作为首选JSON库。
避免泛型擦除时,需使用
Spring
的ParameterizedTypeReference
消除对第三方JSON库的强依赖,而不是FastJson
/Jackson
的TypeReference
。也可以使用JDK
中的Type
。
public class JsonParsersTest {
public void deserializeToMap() {
CriteriaMap user = JsonParsers.parseMap(USER1_STRING);
}
public void deserializeToObject1() {
TestUser user = JsonParsers.parseObject(USER2_STRING, TestUser.class);
}
public void deserializeToObject2() {
List<TestUser> users = JsonParsers
.parseObject(USERS_STRING, new ParameterizedTypeReference<List<TestUser>>() {
});
}
public void serializeToString() {
String userString = JsonParsers.parseString(USER1);
}
}
# Select Json Parser
集成多个JSON库时,若有必要,可以主动选择JSON库进行解析。
JsonParser
的集成方式依然是无入侵的,因此对FastJson
/Jackson
的全局配置,同时会对JsonParser
生效。- 因业务需要而切换JSON库的代价非常高,而MornBoot显然避免了这个问题。
public class JsonParserTest {
JsonParser parser1 = JsonParsers.getParser(FAST_JSON);
JsonParser parser2 = JsonParsers.getParser(JACKSON);
}
JsonParser
对象和JsonParsers
工具类用法完全一致,不作赘述。