【问题标题】:Non-standard JSON and Azure Logic Apps非标准 JSON 和 Azure 逻辑应用
【发布时间】:2018-01-03 21:47:05
【问题描述】:

我有一个生成如下 JSON 的 API:

)]}',

{
    //JSON DATA
}

//JSON DATA 是有效的 JSON,但上面的 )]}', 不是。

当我尝试通过逻辑应用获取这些数据时,我得到:

BadRequest. Http request failed: the content was not a valid JSON.

所以,一些相关的问题:

1) 我可以告诉逻辑应用返回无效的 JSON 吗?

2) 如何更好地调试问题?我碰巧知道响应是无效的,但如果我不知道呢?我可以在某处看到原始数据吗?

3) 这一切都通过 Azure 门户网站完成。有更好的工具吗?视觉工作室?

我还应该提到,如果我在返回 XML 而不是 JSON 的同一 API 上调用路由,那么逻辑应用程序可以正常工作。所以它肯定特别不喜欢 JSON 响应。

谢谢!

【问题讨论】:

    标签: json azure http azure-logic-apps


    【解决方案1】:

    首先,请不要将三个问题作为一个问题发布


    问题 1)。您可以做的最好的事情是让 API 返回一个有效的 JSON 对象。出于数百万的原因,这很好。这里有一些:

    • 它几乎是一个标准(有效的 JSON 或 XML -- 是的,老派的方式);
    • 因此,此 API 的任何用户(包括您)都不需要费力猜测发生了什么以及为什么;
    • 您的逻辑应用的步骤将正常工作而不会增加额外的复杂性;
    • 你会让这个世界和你的业力变得更好。

    如果您无法进行 API 方面的更改,我认为您无能为力。如果幸运并且 HTTP 操作成功(状态代码 2xx),您可以尝试使用带有截断第一个字符的函数的 Query Action。它看起来类似这样(我不知道确切的语法):@Substring(body('myHttpGet'), 4, length(body('myHttpGet')) - 4) 其中myHttpGet 是 Http Get 操作的 id。

    但是,如果可能,我再次强烈建议修复作为问题根源的 API,而不是在此之后处理垃圾响应。

    更新 您可以做的另一件事是包装脏 API。例如,您可以创建一个简单的 Azure 函数,该函数调用您不直接控制的 API,并根据您的消费要求清理响应。这个 Azure Function 函数应该很容易从逻辑应用中调用。它几乎没有成本(除非我们谈论的是每月数百万个请求)。这里唯一的缺点是延迟增加,这可能根本不是问题——测试它,看看它增加的时间是否少于 100 毫秒……哦,别忘了向 API 所有者提交一张票,他们让我们的世界变得很糟糕!


    问题 2)在 Azure Logic App Web UI 中,你可以查看执行细节,错误肯定会出现。


    问题 3)您要求的工具推荐根据定义是一个高度主观的事情,并且在 StackOverflow 上是题外话。

    【讨论】:

    • 1) 我正在努力修复 API,但它掌握在供应商手中。与此同时,我需要知道我的选择是什么。 2) 谢谢。 3)足够公平。
    • @crowhill 我刚刚在答案的“调试”部分添加了一些图像。继续深入研究 UI,它实际上非常直观!如果有帮助,请考虑投票和/或接受我的回答。
    • @crowhill 我还添加了一个关于 Azure Function 的更新,它可能会派上用场,让您可以解决...
    【解决方案2】:

    TL/DR:其他应用没有生成有效的 JSON。

    意思是,这不是你要解决的问题。如果所有者声称应该返回有效的 JSON,则其他应用必须返回。

    如果他们不能或不会生成有效的 JSON,那么您需要做的第一件事就是通知您的管理层您将不得不花费 大量额外时间 来适应他们的非标准格式。

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2021-10-22
      • 1970-01-01
      • 2022-11-10
      • 2018-12-13
      • 2021-09-04
      相关资源
      最近更新 更多