使用jolt转换多个json对象

2uluyalo  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(628)

我正在尝试使用jolt转换这个json输入。请帮我看看我的规格有什么问题。
json输入

{
  "ResultSets": {
    "ClassPaths": {
      "currentRow": 0,
      "fields": [
        {
          "name": "path"
        },
        {
          "name": "loadOrder"
        }
      ],
      "rows": [
        [
          "/a/b/genenerator.jar",
          "-10"
        ],
        [
          "/a/b/server.jar",
          "0"
        ]
      ]
    },
    "DisabledComponents": {
      "currentRow": 0,
      "fields": [
        {
          "name": "name"
        },
        {
          "name": "location"
        }
      ],
      "rows": [
        [
          "ActiveDirectoryLdapComponent",
          "/a/b/component.hda"
        ],
        [
          "AppAdapterCore",
          "/a/b/AdapterCore.hda"
        ]
      ]
    }
  }
}

预期的json输出

{
  "ResultSets" : {
    "ClassPaths" : [ {
      "path" : "/a/b/genenerator.jar",
      "loadOrder" : "-10"
    }, {
      "path" : "/a/b/server.jar",
      "loadOrder" : "0"
    } ],
     "DisabledComponents" : [ {
      "name" : "ActiveDirectoryLdapComponent",
      "location" : "/a/b/component.hda"
    }, {
      "name" : "AppAdapterCore",
      "location" : "/a/b/AdapterCore.hda"
    } ]
  }
}

我的规格是

[
  {
    "operation": "shift",
    "spec": {
      "ResultSets": {
        "*": {
          "rows": {
            "*": {
              "*": "ResultSets.&1.@(3,fields[&].name)"
            }
          }
        }
      }
    }
  }
]

如果我将*替换为键名(classpath或disabledcomponents),它可以工作,但只提供带有该键的json。
我不能硬编码的关键,因为它的动态,我们不知道有什么事先。
所以我想要一个规范,它不需要在规范中指定确切的键(classpath或disabledcomponents)。
请帮忙。
谢谢,哈里

zaq34kh6

zaq34kh61#

你几乎是对的。以下是产生预期输出的规范:

[
  {
    "operation": "shift",
    "spec": {
      "ResultSets": {
        "*": {
          "rows": {
            "*": {
              "*": "ResultSets.&3[&1].@(3,fields[&].name)"
            }
          }
        }
      }
    }
  }
]

说明: &1 -指数组中对象的索引
相反,我们想把它放在同一个索引下,但是被三层以上的对象 Package 起来。这就是为什么 &1 我们使用 &3[&1]

相关问题