如何在我的 JSONata 代码中获得正确的分组?

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

给出如下 JSON 数据示例:

{
    "payload":
    [
        {
            "lspf_numlot": "22701-15",
            "prop_attrezzatura": "OP5                                               ",
            "proposta_data_inizio": "2024-03-01T09:55:00.000Z",
            "proposta_data_fine": "2024-03-01T16:55:00.000Z",
            "IDFase": 11023
        },
        {
            "lspf_numlot": "22701-15",
            "prop_attrezzatura": "CP8                                               ",
            "proposta_data_inizio": "2024-03-01T16:57:00.000Z",
            "proposta_data_fine": "2024-03-02T16:57:00.000Z",
            "IDFase": 11024
        },
        {
            "lspf_numlot": "22701-15",
            "prop_attrezzatura": "BU6                                               ",
            "proposta_data_inizio": "2024-03-03T13:57:00.000Z",
            "proposta_data_fine": "2024-03-03T16:57:00.000Z",
            "IDFase": 11026
        },
        {
            "lspf_numlot": "22701-15",
            "prop_attrezzatura": "SPROMBA1                                          ",
            "proposta_data_inizio": "2024-03-03T13:57:00.000Z",
            "proposta_data_fine": "2024-03-03T16:57:00.000Z",
            "IDFase": 11026
        },
        {
            "lspf_numlot": "22701-15",
            "prop_attrezzatura": "GPROMMCP3                                         ",
            "proposta_data_inizio": "2024-03-03T13:57:00.000Z",
            "proposta_data_fine": "2024-03-03T16:57:00.000Z",
            "IDFase": 11026
        },
        {
            "lspf_numlot": "03641-01",
            "prop_attrezzatura": "BL5                                               ",
            "proposta_data_inizio": "2024-02-27T08:16:00.000Z",
            "proposta_data_fine": "2024-02-27T12:11:00.000Z",
            "IDFase": 36148
        },
        {
            "lspf_numlot": "03641-01",
            "prop_attrezzatura": "BU6                                               ",
            "proposta_data_inizio": "2024-02-27T14:22:00.000Z",
            "proposta_data_fine": "2024-02-27T19:26:00.000Z",
            "IDFase": 36149
        }
    ]
}

我想要得到这样的东西:

{
    "dataItems": [
        {
            "group": "22701-15",
            "data": [
                {
                    "label": "11023",
                    "data": [
                        {
                            "timeRange": [
                                "2024-03-01T09:55:00.000Z",
                                "2024-03-01T16:55:00.000Z"
                            ],
                            "val": "OP5"
                        }
                    ]
                },
                {
                    "label": "11024",
                    "data": [
                        {
                            "timeRange": [
                                "2024-03-01T16:57:00.000Z",
                                "2024-03-02T16:57:00.000Z"
                            ],
                            "val": "CP8"
                        }
                    ]
                },
                {
                    "label": "11026",
                    "data": [
                        {
                            "timeRange": [
                                "2024-03-03T13:57:00.000Z",
                                "2024-03-03T16:57:00.000Z"
                            ],
                            "val": "BU6"
                        },
                        {
                            "timeRange": [
                                "2024-03-03T13:57:00.000Z",
                                "2024-03-03T16:57:00.000Z"
                            ],
                            "val": "SPROMBA1"
                        }
                    ]
                },
                {
                    "label": "11027",
                    "data": [
                        {
                            "timeRange": [
                                "2024-03-03T13:57:00.000Z",
                                "2024-03-03T16:57:00.000Z"
                            ],
                            "val": "SPROMBA1"
                        }
                    ]
                },
                {
                    "label": "11028",
                    "data": [
                        {
                            "timeRange": [
                                "2024-03-03T13:57:00.000Z",
                                "2024-03-03T16:57:00.000Z"
                            ],
                            "val": "GPROMMCP3"
                        }
                    ]
                }
            ]
        },
        {
            "group": "03641-01",
            "data": [
                {
                    "label": "36148",
                    "data": [
                        {
                            "timeRange": [
                                "2024-02-27T08:16:00.000Z",
                                "2024-02-27T12:11:00.000Z"
                            ],
                            "val": "BL5"
                        }
                    ]
                },
                {
                    "label": "36149",
                    "data": [
                        {
                            "timeRange": [
                                "2024-02-27T14:22:00.000Z",
                                "2024-02-27T19:26:00.000Z"
                            ],
                            "val": "BU6"
                        }
                    ]
                }
            ]
        }
    ]
}

我能够创建的最佳解决方案是:

payload{
   "dataItems": [
       $.{
           "group": $.lspf_numlot,
           "data": [
               {
                   "label": $string($.IDFase),
                   "data": [
                       {
                           "timeRange": [
                               $.proposta_data_inizio,
                               $.proposta_data_fine
                            ],
                           "val": $trim($.prop_attrezzatura)
                        }
                    ]
                }
            ]
        }
    ]
}

这给了我这些数据:

{  "payload": {
    "dataItems": [
      {
        "group": "33001-07",
        "data": [
          {
            "label": "27486",
            "data": [
              {
                "timeRange": [
                  "2024-02-16T08:00:00.000Z",
                  "2024-02-16T10:00:00.000Z"
                ],
                "val": "BL5"
              }
            ]
          }
        ]
      },
      {
        "group": "33001-07",
        "data": [
          {
            "label": "27487",
            "data": [
              {
                "timeRange": [
                  "2024-02-16T14:00:00.000Z",
                  "2024-02-16T16:00:00.000Z"
                ],
                "val": "OP5"
              }
            ]
          }
        ]
      },
      {
        "group": "33001-07",
        "data": [
          {
            "label": "27488",
            "data": [
              {
                "timeRange": [
                  "2024-02-16T17:00:00.000Z",
                  "2024-02-16T19:00:00.000Z"
                ],
                "val": "BU6"
              }
            ]
          }
        ]
      },
      {
        "group": "33001-08",
        "data": [
          {
            "label": "27489",
            "data": [
              {
                "timeRange": [
                  "2024-02-16T11:00:00.000Z",
                  "2024-02-16T13:00:00.000Z"
                ],
                "val": "CP8"
              }
            ]
          }
        ]
      }
    ]
  }
}

我需要按

lspf_numlot
分组,然后按
IDFase
分组,最后按
prop_attrezzatura
分组(如上面的示例)。我已经阅读了 JSONata 的整个文档(https://docs.jsonata.org/),但不明白如何创建这样的嵌套分组。我想可能需要某种分解(地图?),但我无法理解如何实现这一点。

json node-red jsonata
1个回答
0
投票

我希望下面的表达式能够给你带来预期的结果:

{"dataItems": $each(payload {
  lspf_numlot: ${
      IDFase & '': ${
          prop_attrezzatura: ${
              "val": prop_attrezzatura,
              "timeRange": [proposta_data_inizio, proposta_data_fine]
          }
      }
      }
  }, function($v, $k) {
      {
          "group": $k,
          "data": $each($v, function($vv, $kk) {
              {
                  "label": $kk,
                  "data": $each($vv, function($vvv, $kkk) {
                      {
                          "val": $kkk,
                          "timeRange": $vvv.timeRange
                      }
                  })[]
              }
          })
      }
    })
}

结果如下:

{
  "dataItems": [
    {
      "group": "22701-15",
      "data": [
        {
          "label": "11023",
          "data": [
            {
              "val": "OP5                                               ",
              "timeRange": [
                "2024-03-01T09:55:00.000Z",
                "2024-03-01T16:55:00.000Z"
              ]
            }
          ]
        },
        {
          "label": "11024",
          "data": [
            {
              "val": "CP8                                               ",
              "timeRange": [
                "2024-03-01T16:57:00.000Z",
                "2024-03-02T16:57:00.000Z"
              ]
            }
          ]
        },
        {
          "label": "11026",
          "data": [
            {
              "val": "BU6                                               ",
              "timeRange": [
                "2024-03-03T13:57:00.000Z",
                "2024-03-03T16:57:00.000Z"
              ]
            },
            {
              "val": "SPROMBA1                                          ",
              "timeRange": [
                "2024-03-03T13:57:00.000Z",
                "2024-03-03T16:57:00.000Z"
              ]
            },
            {
              "val": "GPROMMCP3                                         ",
              "timeRange": [
                "2024-03-03T13:57:00.000Z",
                "2024-03-03T16:57:00.000Z"
              ]
            }
          ]
        }
      ]
    },
    {
      "group": "03641-01",
      "data": [
        {
          "label": "36148",
          "data": [
            {
              "val": "BL5                                               ",
              "timeRange": [
                "2024-02-27T08:16:00.000Z",
                "2024-02-27T12:11:00.000Z"
              ]
            }
          ]
        },
        {
          "label": "36149",
          "data": [
            {
              "val": "BU6                                               ",
              "timeRange": [
                "2024-02-27T14:22:00.000Z",
                "2024-02-27T19:26:00.000Z"
              ]
            }
          ]
        }
      ]
    }
  ]
}

这是如何运作的:

  1. 我们将
    payload
    数组分组到预期的分组中。
  2. 对于每个结果对象键,我们将值映射到预期输出。
© www.soinside.com 2019 - 2024. All rights reserved.