# 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库。

避免泛型擦除时,需使用SpringParameterizedTypeReference消除对第三方JSON库的强依赖,而不是FastJson/JacksonTypeReference。也可以使用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库进行解析。

  1. JsonParser的集成方式依然是无入侵的,因此对FastJson/Jackson的全局配置,同时会对JsonParser生效。
  2. 因业务需要而切换JSON库的代价非常高,而MornBoot显然避免了这个问题。
public class JsonParserTest {
  JsonParser parser1 = JsonParsers.getParser(FAST_JSON);
  JsonParser parser2 = JsonParsers.getParser(JACKSON);
}

JsonParser对象和JsonParsers工具类用法完全一致,不作赘述。