非标准JSON和Azure逻辑应用程序

时间:2018-01-03 21:47:05

标签: json azure http azure-logic-apps

我有一个像这样产生JSON的API:

)]}',

{
    //JSON DATA
}

//JSON DATA是有效的JSON,但)]}',是最高的。

当我尝试通过Logic App获取此数据时,我得到:

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

所以,一些相关的问题:

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

2)如何更好地调试问题?我碰巧知道答案是无效的,但如果我不知道怎么办?我可以在某个地方看到原始数据吗?

3)这一切都是通过Azure门户网站完成的。有更好的工具吗? Visual Studio?

我还应该提一下,如果我在返回 XML 而不是JSON的同一API上调用路由,那么Logic App工作正常。所以它绝对不喜欢JSON响应。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

  • 它几乎是一个标准(有效的JSON或XML - 是的,老派的方式);
  • 因此,此API的任何用户(包括您)都不需要努力猜测正在发生的事情以及原因;
  • 您的Logic App的步骤将正常工作而不会增加额外的复杂性;
  • 你将使这个世界和你的业力更好。

如果API方面的更改不在您的掌控之中,我认为您无法做多。如果您很幸运并且HTTP操作成功(状态代码2xx),您可以尝试使用具有截断第一个字符的函数的Query Action。它会看起来 类似 (我不知道确切的语法):@Substring(body('myHttpGet'), 4, length(body('myHttpGet')) - 4)其中myHttpGet是Http的ID采取行动。

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

UPDATE 您可以做的另一件事是包装脏API。例如,您可以创建一个简单的Azure函数来调用您不能直接控制的API,并根据您的消费需求清理响应。应该可以从Logic App轻松调用此Azure功能。几乎没有任何成本(除非我们每个月都在谈论数百万个请求)。这里唯一的缺点是延迟增加,这可能根本不是问题 - 测试它,看它是否增加不到100ms左右......哦,不要忘记用API提交一张票老板,他们让我们的世界成为一个糟糕的地方!

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

enter image description here

enter image description here

enter image description here

问题3)您要求提供工具推荐,根据定义,这是一个非常主观的东西,并且在StackOverflow上是偏离主题的。

答案 1 :(得分:0)

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

意思是,这不是你要解决的问题。如果所有者声称它应该是另一个应用程序必须返回有效的JSON。

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