0

我尝试使用 Jolt 展平一些 JSON 数组。我发现如何在第一级做到这一点,但我需要“递归”地做到这一点。

关于输入:

  • 我要展平的数组是名称"objects"
  • 内部对象都包含一个"name"属性,但其他属性不常见

这是一个简单的示例:

{
    "objects": [
        {
            "name": "first",
            "type": "FIRST",
            "1st_attr": 0
        },
        {
            "name": "second",
            "type": "SECOND",
            "2nd_attr": 0
        }
    ],
    "sub": {
        "objects": [
            {
                "name": "third",
                "type": "THIRD",
                "3rd_attr": 0
            }
        ]
    }
}

这是我想要的输出:

{
  "first" : {
    "1st_attr" : 0,
    "name" : "first",
    "type" : "FIRST"
  },
  "second" : {
    "2nd_attr" : 0,
    "name" : "second",
    "type" : "SECOND"
  },
  "sub" : {
    "third" : {
      "3rd_attr" : 0,
      "name" : "third",
      "type" : "THIRD"
    }
  }
}

我已经把第一级的规范变平了,但我想让它在每个级别都变平(意思是,不仅仅是第二个;)......):

[
  {
    "operation": "shift",
    "spec": {
      "objects": {
        "*": {
          "@": "@(1,name)"
        }
      },
      "*": "&0"
    }
  }
]

谢谢你的帮助

4

1 回答 1

1

使用 Jolt,您必须知道“对象”数组在输入中的位置。没有办法“只查找并展平所有数组,无论它们在输入文档中的什么位置”。

您提供的输入和输出规范:

[
  {
    "operation": "shift",
    "spec": {
      "objects": {
        "*": "@(0,name)"
      },
      "sub": {
        "objects": {
          "*": "&2.@(0,name)"
        }
      }
    }
  }
]

编辑:添加&2.到 havesub.third而不仅仅是third

于 2016-09-03T13:24:47.607 回答