json 使用JOLT将列表转换为对象数组

x33g5p2x  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(222)

我已经花了很多时间来解决这个问题,但是我被卡住了,我有一个嵌套的JSON,我想用那些与“codes”的键相匹配的值来丰富“attr”的值,提前感谢。
我的输入JSON:

{
  "items": {
    "a1b2xxxx": {
      "name": "item 1",
      "attr": [
        "A",
        "B",
        "C"
      ]
    },
    "c2b2cxxxx": {
      "name": "item 2",
      "attr": [
        "D",
        "E",
        "F"
      ]
    }
  },
  "codes": {
    "A": {
      "color": "green"
    },
    "B": {
      "size": "M"
    },
    "C": {
      "sku": "NS"
    },
    "D": {
      "stock": 2
    },
    "E": {
      "some_key": "some_value"
    },
    "F": {
      "foo": "bar"
    }
  }
}

我想要的输出JSON:

{
  "items": {
    "a1b2xxxx": {
      "name": "item 1",
      "attr": {
        "A": {
          "color": "green"
        },
        "B": {
          "size": "M"
        },
        "C": {
          "sku": "NS"
        }
      }
    },
    "c2b2xxxx": {
      "name": "item 2",
      "attr": {
        "D": {
          "stock": 2
        },
        "E": {
          "some_key": "some_value"
        },
        "F": {
          "foo": "bar"
        }
      }
    }
  },
  "codes": {
    "A": {
      "color": "green"
    },
    "B": {
      "size": "M"
    },
    "C": {
      "sku": "NS"
    },
    "D": {
      "stock": 2
    },
    "E": {
      "some_key": "some_value"
    },
    "F": {
      "foo": "bar"
    }
  }
}

我的方法如下:
1.使用基数运算将attr转换为对象数组
1.然后我可以使用modify-default-beta从代码Map值
但我在第一步就卡住了。下面是我的变压器:

[
  {
    "operation": "cardinality",
    "spec": {
      "items": {
        "*": {
          "attr": "ONE"
        }
      }
    }
  }
]
nkkqxpd9

nkkqxpd91#

您可以使用单一shift转换,例如

[
  {
    "operation": "shift",
    "spec": {
      "items": {
        "*": {
          "name": "&2.&1.&",
          "attr": {
            "*": { // the level of the indexes of "attr" array, eg. 0,1,2
              "*": { // the level of the components of "attr" array, eg. A,B,C,D,E,F
                "@(5,codes.&)": "&5.&4.&" // going four levels up the tree to get the object labels of "a1b2xxxx" and "c2b2cxxxx"
              }
            }
          }
        }
      },
      "*": "&" // objects(attributes or array) other than "items", eg. "codes" 
    }
  }
]

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

相关问题