JsonPath 随附五种不同的 JsonProviders:
如下图:
注意,只有在应用程序初始化时,才能按需求更改配置默认值。强烈不建议在运行期间更改配置,尤其是在多线程应用程序中。
修改默认配置实例代码:
Configuration.setDefaults(new Configuration.Defaults() { // 实例化 JsonProvider private final JsonProvider jsonProvider = new JacksonJsonProvider(); // 实例化 MappingProvider private final MappingProvider mappingProvider = new JacksonMappingProvider(); @Override public JsonProvider jsonProvider() { // 返回配置的 JsonProvider return jsonProvider; } @Override public MappingProvider mappingProvider() { // 返回配置的 MappingProvider return mappingProvider; } @Override public Set<Option> options() { // 其他选项配置 return EnumSet.noneOf(Option.class); } });
请注意,JacksonJsonProvider 需要 com.fasterxml.jackson.core:jackson-databind:2.4.5 的类路径,而 GsonJsonProvider 需要 com.google.code.gson:gson:2.3.1 的类路径。
Jakarta EE 9 JSON-P (JSR-342) 和 JSON-B (JSR-367) 提供程序至少需要 Java 8,并要求应用程序运行时类路径上有兼容的 JSON API 实现(如 Eclipse Glassfish 和 Eclipse Yasson。Java EE 应用程序容器也可能提供此类实现。还请注意,Apache Johnzon 尚不兼容 Jakarta EE 9 规范的类路径,如果选择 JSON-B 映射提供程序,则还必须配置和使用 JSON-P 提供程序。
Jakarta EE 9 关于 JSON 处理和数据库绑定(映射)的规范有一个特点,那就是 Json 数组和对象在完全解析或写入后具有不变性。为了遵守 API 规范,同时允许 JsonPath 通过添加、设置/输入、替换和删除操作修改 Json 文档,JakartaJsonProvider 必须使用可选的 true 参数进行 initiliazed:
JsonProvider jsonProvider = new JakartaJsonProvider(true)(启用可变 Json 数组和对象)
JsonProvider jsonProvider = new JakartaJsonProvider()(默认,严格遵循 JSON-P API)
无论采用哪种启动模式,都支持使用 JsonPath 进行的所有查找和读取操作,默认模式所需的内存更少,性能更高。