Jolt Transform 将对象添加到数组

问题描述 投票:0回答:1

我在实施 Jolt Spec 来转换此输入时遇到问题。

输入:

{
  "id": 12345,
  "category": 2,
  "productAttributes": {
    "data": [
      {
        "name": "Size",
        "slug": "size",
        "value": "10"
      },
      {
        "name": "Color",
        "slug": "color",
        "value": "Grey"
      }
    ]
  }
}

规格:

[
  {
    "operation": "shift",
    "spec": {
      "productAttributes": {
        "data": {
          "*": {
            "slug": "attributes[#2].key",
            "value": "attributes[#2].value",
            "name": "attributes[#2].name"
          }
        }
      }
    }
 }
]

所需输出:

{
  "attributes" : [ {
    "key" : "size",
    "value" : "10",
    "name" : "Size"
  }, {
    "key" : "color",
    "value" : "Grey",
    "name" : "Color"
  }, {
    "key" : "category",
    "value" : "2",
    "name" : "Category"
  } ]
}

我想将 root 中的类别添加到属性数组中。该值将从类别属性中获取。键和名称将填充为静态。

你能帮我吗?谢谢。

json jolt
1个回答
0
投票

你可以使用

  • a&(3,1)
    (或
    a&(2,1)
    )标识符,它会在树上向上移动
    1
    3
    级别后复制第一个
    2
    星号,以便将通用文字
    ttributes
    与对象一起保留将会添加

  • #
    通配符对文字进行硬编码

因此,所需的转变将是

[
  {
    "operation": "shift",
    "spec": {
      "productA*": {
        "data": {
          "*": {
            "slug": "a&(3,1).&1.key",
            "*": "a&(3,1).&1.&"
          },
          "#category": "a&(2,1).&1.key",
          "@2,category": "a&(2,1).&1.value",
          "#Category": "a&(2,1).&1.name"
        }
      }
    }
  },
  { //convert to array of obects
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "[#2].&"
        }
      }
    }
  },
  { //make all "value"s quoted
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "*": "=toString"
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.