4

我正在使用 IBM Worklight Studio,并尝试创建从外部 http 服务器检索 JSON 对象的 HTTP 适配器。

当我只是使用 HTTP Get 访问(例如使用浏览器)访问目标 http 服务器时,我知道他们的响应类似于以下数组样式 JSON 格式:

[
  { "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);

现在我尝试使用“Run As -> Invoke Worklight Procedure”调用此适配器,然后收到以下错误消息:

{
   "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 对象需要以“{”开头,而不是“[”。

这是我的猜测吗?有什么解决方法吗?

感谢提前。

4

2 回答 2

4

Worklight 知道如何处理以[(JSON 数组)开头的 JSON 对象。在这种情况下,Worklight 将返回响应为:

{ "array" : [*the json array*]}

查看 HTTP 适配器的代码,我发现解析不以[.

除了更改从 http 服务器返回的响应外,我没有看到解决此问题的方法。

我打开了一个关于这个的内部错误,感谢您帮助我们找到这个错误。

于 2013-03-10T11:47:40.550 回答
3

您可以将returnedContentType 更改为“plain”,这将使WL 服务器将内容作为大字符串返回,而不是尝试解析它。然后在您的适配器中,您可以使用 var obj = JSON.parse(response.text)

于 2013-03-12T06:16:33.987 回答