有没有办法用Jolt写一个空的json转换(通过orig文件)?

时间:2017-01-20 22:50:47

标签: json transformation jolt

您知道XSLT和其他XML处理语言如何支持通过未修改传递文档的“null转换”吗?

我想为Jolt(Apache Camel和其他地方使用的非常好的JSON转换库)做同样的事情。

我可以使用JOLT的“插入默认”功能,并在文档的顶层粘贴一些无害的JSON标记和值..这几乎是想要的。但我无法弄清楚如何通过JOLT传递文件,但保持不变。

为什么我要这样做?我们正在开发一个流数据管道,我必须将传入的字符串验证为有效的JSON ... Jolt对我来说是免费的,但在某些情况下我不想跟随文档。所以,我想使用JOLT作为管道中的一个步骤,但是(在某些情况下)它对输入的JSSON文档没有任何作用。

2 个答案:

答案 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"
    }
  }
]