您知道XSLT和其他XML处理语言如何支持通过未修改传递文档的“null转换”吗?
我想为Jolt(Apache Camel和其他地方使用的非常好的JSON转换库)做同样的事情。
我可以使用JOLT的“插入默认”功能,并在文档的顶层粘贴一些无害的JSON标记和值..这几乎是想要的。但我无法弄清楚如何通过JOLT传递文件,但保持不变。
为什么我要这样做?我们正在开发一个流数据管道,我必须将传入的字符串验证为有效的JSON ... Jolt对我来说是免费的,但在某些情况下我不想跟随文档。所以,我想使用JOLT作为管道中的一个步骤,但是(在某些情况下)它对输入的JSSON文档没有任何作用。
答案 0 :(得分:1)
另一种选择是创建自定义变换器。
package com.example;
public class NullTransform implements Transform{
@Override
public Object transform(Object input) {
return input;
}
}
然后从链子摇晃引用它,如下所示
[
{
"operation": "com.example.NullTransform"
{
]
您仍会产生deserializaion /序列化开销,但不会运行其他代码。
答案 1 :(得分:0)
OOTB Jolt包含5个“操作”,可应用于输入水合Json。其中4个(默认,删除,排序,基数)是变异操作/修改提供的水合Json。我给了那些4个空的“规范”,他们什么都不做,你的数据会“通过”。
“shift”操作不会改变它给出的输入。相反,它将数据从“输入”“复制”到新的“输出”地图/列表。如果你不给“转移”一个规范,那么它就不会复制任何内容。
因此,从您的问题来看,这听起来像是在谈论“转变”。随着轮班,你必须明确地通过所有你想“保持”的东西。
根据您的数据,这可能很糟糕或很容易,因为您可以移植复制非常大的数据块。
示例,关于jolt演示站点上的“inception”示例。 http://jolt-demo.appspot.com/#inception
此Spec基本上通过输入传递,将整个嵌套地图“评级”通过输出。
...phones.rb:3:in `<class:Phones>': uninitialized constant Phones::Apps (NameError)
可以用通配符推广到: 规格
[
{
"operation": "shift",
"spec": {
"rating": "rating"
}
}
]