0

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

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

我可以使用 JOLT 的“插入默认值”功能,并在文档的顶层粘贴一些无害的 JSON 标记和值。这几乎是想要的。但我不知道如何通过 JOLT 传递文档,但不对其进行修改。

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

4

2 回答 2

2

另一种选择是创建自定义转换器。

package com.example;
public class NullTransform implements Transform{

    @Override
    public Object transform(Object input) {
        return input;
    }

}

然后从 chainr jolt 中引用它,如下所示

[
  {
  "operation": "com.example.NullTransform"
  }
]

您仍然会产生反序列化/序列化开销,但不会运行其他代码。

于 2017-09-25T10:31:49.900 回答
0

OOTB Jolt 包含 5 个“操作”,可应用于输入的水合 Json。其中 4 个(默认、删除、排序、基数)是突变操作/修改提供的水合 Json。我给了这 4 个空的“规范”,他们什么都不做,你的数据会“通过”。

“移位”操作不会改变给定的输入。相反,它将数据从“输入”“复制”到新的“输出”映射/列表。如果你不给“转变”一个规范,那么它不会复制任何东西。

因此,从您的问题来看,听起来您在谈论“转变”。使用 shift 你必须明确地通过所有你“想要保留”的东西。

根据您的数据,这可能很糟糕或很容易,因为您可以转移复制非常大的数据块。

例如,对于 jolt 演示站点上的“inception”示例。 http://jolt-demo.appspot.com/#inception

该规范基本上通过输入传递,将整个嵌套映射“评级”通过输出。

[
  {
    "operation": "shift",
    "spec": {
      "rating": "rating"
    }
  }
]

它可以用通配符概括为:Spec

[
  {
    "operation": "shift",
    "spec": {
      "*": "&"
    }
  }
]
于 2017-01-22T19:30:34.563 回答