jolt插件是使用Java语言编写的Json格式转化插件,它的主要作用是将一种json格式转化为另外一种json格式。它通过使用配置文件定义转换规则的方法,使得json转换可配置,只要输入的json格式是固定的(这一点很重要)就可以使用jolt插件进行转换。本篇主要介绍常用的几种转换方式,感兴趣的童鞋可以前往GitHub学习该插件的时使用方法。jolt插件GitHub地址:https://github.com/bazaarvoice/jolt/tree/jolt-0.1.0#Overview
一、jolt插件主要转换方法与基本使用
插件提供了5种转换方法:
(1)shift:主要作用是拷贝,将输入json的某个结构拷贝到目标json
(2)default:主要作用是设置默认值,如果输入json某个value不存在,则使用默认值补齐
(3)remove:主要作用是删除,可以删除输入json结构的某个结构
(4)sort:对key值进行排序
(5)cardinality:jsonobject和jsonarray之间的切换
注:5种转换方法分别对应了5个Java类:Shiftr
、Defaultr
、Removr
、Sortr
、CardinalityTransform
,如果定义的转换规则中只是使用到了以上转换中的一种,则可以使用这5个类的transform
方法转换,如果转换规则中使用了两种或者两种以上的转换,则需要使用另外一个类Chainr
中的转换方法。
以Shiftr
为例,java代码如下:
Object input = JsonUtils.classpathToObject("/jolt/Shiftr/sample01/input.json"); //读取input.json,如果input已经是一个java对象,则可以忽略这步
Object spec = JsonUtils.classpathToObject("/jolt/Shiftr/sample01/spec.json"); //使用Jolt自带的JsonUtils读取配置的转换规则spec.json作为一个object
Shiftr shiftr=new Shiftr(spec); //创建shiftr对象,传入转化规则
Object output = shiftr.transform(input); //转换input,得到output
System.out.println(JsonUtils.toJsonString(output));
input.json文件内容:
{
"foo": {
"barKey": "barValue",
"bazKey": "bazValue"
}
}
spec.json内容(具体怎样编写,后面会详细介绍):
{
"foo": {
"*": {
"$": "test.&(1,0).id"
}
}
}
其他类型进行转换的时候与此类似,使用Chainr
转换有点特殊,java代码如下:
Object input = JsonUtils.classpathToObject("/jolt/Chainr/sample01/input.json");
List<Object> spec = JsonUtils.classpathToList("/jolt/Chainr/sample01/spec.json"); //和其他类型不同,此处配置的转换规则是一个jsonarray,需要转换为List
Chainr chainr = Chainr.fromSpec(spec);
Object output = chainr.transform(input);
System.out.println(JsonUtils.toJsonString(output));
chainr转换的时候,转换规则配置的是一个jsonarray,通过operation来区分不同的转换方法,operation取值有shift,default,remove,cardinality,sort
,每一种转换的规则作为spec的value,如:
[{
"operation": "shift",
"spec": {
"rating": {
"quality": {
"value": "SecondaryRatings.quality.Value",
"max": "SecondaryRatings.quality