json 将嵌套数组外部的已知键组合为该数组的对象

6jjcrrmo  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(104)

我有一个输入JSON,如下所示:

[
  {
    "some_key": "x",
    "foo_id": 123,
    "foo_name": "bar_1",
    "all_foo": [
      {
        "foo_id": 456,
        "foo_name": "bar_2"
      }
    ]
  }
]

要求是将foo_idfoo_name(这是提前知道的)折叠为all_foo下的对象,因此输出为:

[
  {
    "some_key": "x",
    "all_foo": [
      {
        "foo_id": 123,
        "foo_name": "bar_1"
      },
      {
        "foo_id": 456,
        "foo_name": "bar_2"
      }
    ]
  }
]

all_foo上的顺序并不重要。
目前为止我尝试的是:

[
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "all_foo": {
        "*": "&",
        "&1": "[&1].&"
      }
    }
}
]
at0kjp5o

at0kjp5o1#

您可以使用以下shift转换规范

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "some_key": "&",
        "all_foo": {
          "@1,foo_name": "&1[0].foo_name",
          "@1,foo_id": "&1[0].foo_id",
          "*": "&1[]"
        }
      }
    }
  }
]

或者使用以下选项

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "&", // else case in which only "some_key" attribute is matched
        "foo_*": "all_foo.&", // all attributes those start with foo_
        "all_foo": {
          "*": "&1"
        }
      }
    }
  }
]

其中所有键-值对都是从树的同一级别调用的

相关问题