【问题标题】:AWS EventBridge putEvents does not accept Detail JSON arrayAWS EventBridge putEvents 不接受详细 JSON 数组
【发布时间】:2020-11-20 15:00:13
【问题描述】:

我正在使用 AWS 开发工具包v2.796.0

根据 putEvents 的文档,Detail 值必须是有效的 JSON 字符串。 https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEventsRequestEntry.html

但是,它不接受 JSON 数组作为字符串。

    const eventBridge = new AWS.EventBridge();
    const entries = {
      Entries: [
        {
          EventBusName: "busName",
          Source: "api.user",
          DetailType: "detailType",
          Detail: JSON.stringify({ test: { test: ["test", "test2"] } }),
        },
      ],
    };
    const rs = await eventBridge.putEvents(entries).promise();
    console.log(rs);
    // this passes
    // {
    // FailedEntryCount: 0,
    // Entries: [ { EventId: 'a6176012-7310-2b84-a9b5-819956e2e3f9' } ]
    // }

    const entries2 = {
      Entries: [
        {

          EventBusName: "busName",
          Source: "api.user",
          DetailType: "detailType",
         Detail: JSON.stringify([{ test: "test" }]),
        },
      ],
    };
    const rs2 = await eventBridge.putEvents(entries2).promise();
    console.log(rs2);
    // this fails
    // {
    //    FailedEntryCount: 1,
    //    Entries: [
    //    {
    //      ErrorCode: 'MalformedDetail',
    //      ErrorMessage: 'Detail is malformed.'
    //     }
    //    ]
    //  }

这是预期的吗?有没有办法详细使用数组?

【问题讨论】:

  • @Marcin 请参阅下面的答案。解决方法是将数组包装在另一个对象中。例如Detail: JSON.stringify({events: ["test1", "test2"])

标签: amazon-web-services aws-sdk aws-sdk-js aws-event-bridge


【解决方案1】:

发生这种情况是因为您在 entries2 中使用了列表:

Detail: JSON.stringify([{ test: "test" }]),

如果你只使用对象,它会起作用:

Detail: JSON.stringify({ test: "test" }),

【讨论】:

  • 是的。我们已经转向这种方法。但似乎根据文档,两者都应该像 Detail 一样工作,只需要是一个有效的 JSON 字符串。即使是字符串化列表也是有效的 JSON 字符串。
  • @RashidShaikh 我知道该列表是有效的 json,但似乎不适用于 EventBridge。
  • 有没有办法允许使用数组?
猜你喜欢
  • 1970-01-01
  • 2021-07-09
  • 2021-03-24
  • 2022-06-22
  • 2019-04-29
  • 2017-03-27
  • 1970-01-01
  • 2014-01-24
  • 2014-07-06
相关资源
最近更新 更多