【问题标题】:JOLT get only one value from an array inside an arrayJOLT 仅从数组中的数组中获取一个值
【发布时间】:2021-07-22 15:48:08
【问题描述】:

我一直试图弄清楚如何从这个 JSON 中的事件数组中的数组中获取第一个值。

我认为我必须对 Cardinality 做一些事情,但我无法完全弄清楚,因此我们将不胜感激。

这就是我的 JSON 的样子

{
  "rootid": "19718",
  "clloadm": "2021-06-01T22:40:02",
  "clload": "2021-06-01T21:21:39",
  "date": "2021-05-25T21:52:30",
  "events": [
    {
      "done": {
        "id": "e0",
        "value": "2021-05-29T08:08:19"
      },
      "id": "e0_event",
      "started": {
        "id": "e0",
        "value": "2021-05-29T08:08:19"
      },
      "status": "complete"
    },
    {
      "done": {
        "id": "e1",
        "value": "2021-05-27T02:20:25"
      },
      "id": "e1_event",
      "started": {
        "id": "e1",
        "value": "2021-05-27T02:20:25"
      },
      "status": "complete"
    },
    {
      "done": {
        "id": "e2",
        "value": "2021-05-29T08:08:19"
      },
      "id": "e2_event",
      "started": {
        "id": "e2",
        "value": "2021-05-29T08:08:19"
      },
      "status": "complete"
    },
    {
      "done": {
        "id": "e3",
        "value": "2021-05-29T08:08:19"
      },
      "id": "e3_event",
      "started": {
        "id": "e3",
        "value": "2021-05-29T08:08:19"
      },
      "status": "complete"
    },
    {
      "done": {
        "id": "e4",
        "value": "2021-05-29T08:08:19"
      },
      "id": "e4_event",
      "started": {
        "id": "e4",
        "value": "2021-05-29T08:08:19"
      },
      "status": "complete"
    }
  ],
  "ids": [
    {
      "id": "id",
      "source": "source",
      "value": "value"
    }
  ]
}

我的 Jolt 规格

[
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "events": {
        "*": {
          "*": {
            "@id": {
              "e0": { "@(2,value)": "&" },
              "e4": { "@(2,value)": "&" }
            }
          }
        }
      },
      "ids": {
        "*": {
          "@value": "@id"
        }
      }
    }
  }
]

我得到的结果:

{
  "rootid" : "19718",
  "clloadm" : "2021-06-01T22:40:02",
  "clload" : "2021-06-01T21:21:39",
  "date" : "2021-05-25T21:52:30",
  "e0" : [ "2021-05-29T08:08:19", "2021-05-29T08:08:19" ],
  "e4" : [ "2021-05-29T08:08:19", "2021-05-29T08:08:19" ],
  "id" : "value",
  "new_id" : "value"
}

我希望结果更像这样,只选择第一个值:

{
  "rootid" : "19718",
  "clloadm" : "2021-06-01T22:40:02",
  "clload" : "2021-06-01T21:21:39",
  "date" : "2021-05-25T21:52:30",
  "e0" : "2021-05-29T08:08:19",
  "e4" : "2021-05-29T08:08:19",
  "id" : "value",
  "new_id" : "value"
}

编辑: 我尝试将基数添加到我的规范中,但我似乎无法得到我想要的结果。

[
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "events": {
        "*": {
          "*": {
            "@id": {
              "e0": { "@(2,value)": "&" },
              "e4": {
                "operation": "cardinality",
                "spec": {
                  "e4": "ONE"
                }
              }
            }
          }
        }
      },
      "ids": {
        "*": {
          "@value": "@id"
        }
      }
    }
  }
]

【问题讨论】:

    标签: json jolt


    【解决方案1】:

    是的,您只需添加一个基数转换,例如

    {
      "operation": "cardinality",
      "spec": {
        "*": "ONE"
      }
    }
    

    或可选地使用 e* 通配符来限制具有以字母 e 开头的键的数组的结果,例如

    {
      "operation": "cardinality",
      "spec": {
        "e*": "ONE"
      }
    }
    

    编辑:只需要添加到当前规范。因此,您可以使用以下内容:

    [
      {
        "operation": "shift",
        "spec": {
          "*": "&",
          "events": {
            "*": {
              "*": {
                "@id": {
                  "e0": {
                    "@(2,value)": "&"
                  },
                  "e4": {
                    "@(2,value)": "&"
                  }
                }
              }
            }
          },
          "ids": {
            "*": {
              "@value": "@id"
            }
          }
        }
      },
      {
        "operation": "cardinality",
        "spec": {
          "e*": "ONE"
        }
      }
    ]
    

    【讨论】:

    • 您好,感谢您的回答,但不幸的是,我似乎无法弄清楚如何将该转换添加到我的规范中。请查看我的编辑,我尝试将其合并,但仍然没有得到答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多