Ibm mobilefirst HTTP适配器错误“;运行时:未能分析JSON字符串;
我正在使用IBM Worklight Studio,并尝试创建从外部HTTP服务器检索JSON对象的HTTP适配器 当我仅使用http Get access(例如,使用浏览器)访问目标http服务器时,我知道它们的响应类似于以下数组样式的JSON格式:Ibm mobilefirst HTTP适配器错误“;运行时:未能分析JSON字符串;,ibm-mobilefirst,Ibm Mobilefirst,我正在使用IBM Worklight Studio,并尝试创建从外部HTTP服务器检索JSON对象的HTTP适配器 当我仅使用http Get access(例如,使用浏览器)访问目标http服务器时,我知道它们的响应类似于以下数组样式的JSON格式: [ { "xxx":"aaa", "yyy":"bbb", ... }, { "xxx":"ccc", "yyy":"ddd", ... }, : { "xxx":"eee", "yyy":"fff", ... } ] 我
[
{ "xxx":"aaa", "yyy":"bbb", ... },
{ "xxx":"ccc", "yyy":"ddd", ... },
:
{ "xxx":"eee", "yyy":"fff", ... }
]
我已经创建了HTTP适配器来检索上述信息
var input = {
method : 'get',
returnedContentType : 'json',
path : path
};
return WL.Server.invokeHttp(input);
现在,我尝试使用“运行方式->调用Worklight过程”调用此适配器,然后收到以下错误消息:
{
"errors": [
"Runtime: Failed to parse JSON string\n\n[\n {\n
(raw JSON data) } ],
"info": [],
"isSuccessful": false,
"warnings": []
}
在我的日志控制台中,worklight显示以下错误消息:
FWLSE0101E: Caused by: java.io.IOException: Expecting '{' on line 2, column 2 instead, obtained token: 'Token: ['
从以上信息来看,worklight似乎希望返回的JSON对象需要以“{”开头,而不是以“[”开头
这是我的猜测吗?有什么解决办法吗
感谢您的帮助。Worklight知道如何处理以
[
(JSON数组)开头的JSON对象。在这种情况下,Worklight将返回以下响应:
{ "array" : [*the json array*]}
查看HTTP适配器的代码,我发现解析不以[
开头的JSON数组时存在错误
除了更改http服务器返回的响应外,我看不到解决此问题的方法
我打开了一个关于此的内部错误,感谢您帮助我们找到此错误。您可以将returnedContentType更改为“plain”,这将使WL服务器以大字符串的形式返回内容,而不会尝试解析它。
然后在适配器中可以使用var obj=JSON.parse(response.text)只要确保来自目标服务器的响应以
\n
开头?是的。第一行是\n
,第二行以“[”开头。我感谢您的支持。我再次检查,http服务器的响应似乎以\n
开头,因此您的猜测是正确的。但格式是否错误?实际上,此http服务器是其他IBM产品(Lotus Domino),我不认为这种格式可以自定义。当然,我理解。我感谢您研究这个问题。如果您是IBM客户,您可能想打开一个关于这个问题的PMR,那里可能会提供一个解决方案。谢谢Anton。我已经更改了我的HTTP适配器的.js文件,以获得您建议的纯文本格式(returnedContentType:'plain'),这导致WL.Client.InvokeProcess成功。我还将我的成功回调函数的javascript更改为“var objs=JSON.parse(result.invokeResult.text);”。我已确认此功能如我所料有效。非常感谢!!