Jolt 将对象数组转换为键值

Jolt transform array of objects to key-value

Problems

您好,我正在使用 Jolt 来转换电子商务产品数据。例如:

[
  {
    "objectID": 1,
    "string_facet": [
      {
        "facet_name": "eco_collection",
        "facet_value": "No"
      },
      {
        "facet_name": "performance_fabric",
        "facet_value": "No"
      }
    ]
  },
  {
    "objectID": 2,
    "string_facet": [
      {
        "facet_name": "activity",
        "facet_value": [
          "Hiking"
        ]
      }
    ]
  }
]

我想要的输出是:

[
    {
        "objectID": 1,
        "string_facet": {
            "eco_collection": "No",
            "performance_fabric": "No"
        }
    },
    {
        "objectID": 2,
        "string_facet": {
            "activity": [
                "Hiking"
            ]
        }
    }
]

到目前为止我做了什么

我试过这个规格,但这不是我需要的:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[&1].&",
        "string_facet": {
          "*": {
            "@facet_value": "[&1].string_facet.@facet_name"
          }
        }
      }
    }
  }
]

我正在寻找解决方案之外的解释。

如有任何帮助,我们将不胜感激!

你主要需要 "@facet_value": "@facet_name" 匹配,从它开始,然后添加

  • &2 表示向上两层获取键名的值(string_facet)

  • &3 表示向上三个级别并获取主数组的索引以累积嵌套在它们自己的单个对象中的每个属性。

然后,添加一个额外的 shift 转换规范以去除整数键名称,例如

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "&1.&",
        "string_facet": {
          "*": {
            "@facet_value": "&3.&2.@facet_name"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": ""
    }
  }
]

站点 http://jolt-demo.appspot.com/ 上的 演示