json Jolt规范用于折叠嵌套了“name”键的任何字段

w1e3prcc  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(167)

输入为

[
  {
    "id": 123,
    "foo": "fooooooo",
    "bar": "bbbbbbarr",
    "recordtype": {
      "name": "type123",
      "some_field": "don't care"
    },
    "parent": {
      "name": "parent123",
      "some_field": "don't care"
    }
  },
  {
    "id": 456,
    "foo": "ooooooff",
    "bar": "rrrrraaabbbb",
    "recordtype": {
      "name": "type456",
      "some_field": "don't care"
    },
    "parent": {
      "name": "parent789",
      "some_field": "don't care"
    }
  }
]

所需输出为

[
  {
    "id": 123,
    "foo": "fooooooo",
    "bar": "bbbbbbarr",
    "recordtype": {
      "name": "type123",
      "some_field": "don't care"
    },
    "parent": {
      "name": "parent123",
      "some_field": "don't care"
    },
    "recordtype_name": "type123",
    "parent_name": "parent123"
  },
  {
    "id": 456,
    "foo": "ooooooff",
    "bar": "rrrrraaabbbb",
    "recordtype": {
      "name": "type456",
      "some_field": "don't care"
    },
    "parent": {
      "name": "parent789",
      "some_field": "don't care"
    },
    "recordtype_name": "type456",
    "parent_name": "parent789"
  }
]

其中任何具有嵌套name键的对象都与其父键连接(例如parent和recordtype),分别变为parent_namerecordtype_name。我还需要结果对象中的所有原始键和值。
我已经尽力了。这工作,但所有的原始密钥都不见了。

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "name": "[&2].&1_&"
        }
      }
    }
  }
]
b4lqfgs4

b4lqfgs41#

你最好使用一个modify转换规范,因为它更简单:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "recordtype_name": "@(1,recordtype.name)",
        "parent_name": "@(1,parent.name)"
      }
    }
  }
]

网站http://jolt-demo.appspot.com/上的***演示***是

然而,你可以更喜欢使用shift转换规范作为替代:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "@": "[&2].&",
          "name": "[&2].&1_&"
        }
      }
    }
  }
]

该演示是

如果出现的顺序对第二种情况很重要(使用shift),那么下面的规范可能是首选:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@": "[&1]",
        "recordtype|parent": {
          "name": "[&2].&1_&"
        }
      }
    }
  }
]

相关问题