Jolt Json转换工具的基础教程

Jolt Json转换工具

jolt是一个轻量级的json文件转换库,可以把输入的json按照你编写脚本模板输出成你想要的json文本,能实现同样功能的有我们常用的velocity模板引擎,但jolt跟轻量且更专注于json,且在实现一些简单的格式转换中,模板的编写与编写json一样简单

GitHub地址

https://github.com/bazaarvoice/jolt

在线调试

还提供了在线调试的网站
http://jolt-demo.appspot.com/

使用讲解

jolt有多个语法,本篇简单介绍一下日常使用比较多的【shift】从输入的json复制映射成目标json

引入依赖

<dependency>
    <groupId>com.bazaarvoice.jolt</groupId>
    <artifactId>jolt-core</artifactId>
    <version>0.1.8</version>
</dependency>
<dependency>
    <groupId>com.bazaarvoice.jolt</groupId>
    <artifactId>json-utils</artifactId>
    <version>0.1.8</version>
</dependency>

代码Demo

public static void main(String[] args) {

		// 转换的配置
		List<Object> specList = JsonUtils.classpathToList("/json/spec.json");
		Chainr chainr = Chainr.fromSpec(specList);

		// 来源json数据
		Object input = JsonUtils.classpathToObject("/json/input.json");
		Object transform = chainr.transform(input);

		// 这里的转换配置和输入json都可以是json文本,只需要通过json工具转换成List<Object>和Object即可

		System.out.println(input);
		System.out.println(JsonUtils.toJsonString(transform));
}

示例

我们可以在在线网站上测试好,我们的映射脚本,注意脚本是一个json数组,可以使用多个语法去加工我们的json文本,operation的值是脚本的类型,spec是加工的表达式

字段属性可以直接映射来源json字段赋值到目标json中想要赋值的字段中
在这里插入图片描述
一个值映射给多个属性
在这里插入图片描述

如果想要解析数组集合,需要使用到“*”通配符,用来匹配到该集合下的所有元素
在这里插入图片描述
如果你映射的是一个集合的元素对象又嵌套有集合对象,需要注意的是注意层级关系
在这里插入图片描述
我们日常的数据转换中有很多枚举字段,可以使用“#”通配符来转换
在这里插入图片描述

### Java 中的 JSON 转换库 #### Fastjson Fastjson 是一种非常快速的处理器,具有无额外依赖项的特点以及完整的数据绑定功能。对于需要高效处理 JSON 数据的应用程序来说是一个不错的选择[^1]。 ```java import com.alibaba.fastjson.JSON; public class Example { public static void main(String[] args) { String jsonString = "{\"name\":\"John\", \"age\":30}"; User user = JSON.parseObject(jsonString, User.class); System.out.println(user.getName()); } } class User { private String name; private int age; // getters and setters... } ``` #### Jolt Jolt 提供了一种强大的方式来实现 JSONJSON转换。通过定义一系列操作符可以轻松完成复杂的映射逻辑。 ```json [ { "operation": "shift", "spec": { "name": "fullName" } } ] ``` #### JsonPath JsonPath 支持使用类似于 XPath 的语法从 JSON 文档中提取所需的数据片段,在查询嵌套结构时特别有用。 ```java DocumentContext jsonContext = JsonPath.parse("{\"store\":{\"book\":[{\"category\":\"fiction\",\"title\":\"The Lord of the Rings\"}]}"); String title = jsonContext.read("$.store.book[0].title"); System.out.println(title); // 输出"The Lord of the Rings" ``` #### JsonSurfer 当面对大型复杂 JSON 文件流式处理需求时,JsonSurfer 显示出了其独特的优势。它专注于解决大数据量场景下的性能瓶颈问题。 ```java // 假设有一个 InputStream inputStream 来源自某个大文件或其他输入源 JsonSurfingParser parser = new JsonSurfingParser(); parser.on("/array/*", (ctx, o) -> { System.out.println(o.toString()); // 打印匹配到的对象 }); parsersurf(inputStream); ``` 除了上述提到的具体工具外,还有官方支持的标准API——JSON-B,该标准旨在与现有的Java API for JSON Processing (JSON-P) 进行集成,并计划采用特定包命名约定以便于识别和管理[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值