json 震动变换:合并具有1个以上相似字段和2个以上不同字段的对象

m4pnthwp  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(146)

我有一个类似的问题:
我想转换以下输入:

[
  {
    "name": "Product A",
    "price": 10,
    "color": "green",
    "category": "fruit",
    "id": 1
  },
  {
    "name": "Product A",
    "price": 20,
    "color": "yellow",
    "category": "fruit",
    "id": 1
  },
  {
    "name": "Product B",
    "price": 30,
    "color": "blue",
    "category": "vegetable",
    "id": 2
  }
]

在此输出中:

[
 "product_1" :  {
    "name": "Product A",
    "price": [10,20],
    "color": ["green", "yellow"],
    "category": "fruit",
    "id": 1
  },
 "product_2" :  {
    "name": "Product B",
    "price": 30,
    "color": "blue",
    "category": "vegetable",
    "id": 2
  }
]

在上面的输入中,前两个对象是相似的,具有相同的名称,类别和id,所以我将它们合并到一个对象中。有2个字段是不同的,即价格和颜色。所以我创建这些字段的数组并将它们放入合并的对象中。
我尝试了以下方法:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": {
          "*": {
            "@2": "&[]"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        // "*": {
        //  "price": "product_&2.price",
        //  "color": "product_&2.color"
        // }
        //,
        "0": {
          "name": "product_&2.name",
          "category": "product_&2.category",
          "id": "product_&2.id"
        }
      }
    }
  }
]

但是我可以得到不同字段的数组,或者是具有相似字段的对象,但是我不能同时得到这两个。

py49o6xq

py49o6xq1#

可以应用双shift转换:在第一步骤中;具有公共id值的对象在公共数组元素内和第二数组元素中组合;公共键的值被组合在一起。但是,仍然需要一个包含基数转换的步骤,以便消除某些键的重复元素(在本例中为namecategoryid),例如

[
  {
    "operation": "shift",
    "spec": {
      "*": "@id"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "1": {
        "*": {
          "*": "product_&2.&[]"
        }
      },
      "2": "product_&"
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "product_1": {
        "name": "ONE",
        "category": "ONE",
        "id": "ONE"
      }
    }
  }
]

相关问题