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アダプターのコードを見ると、で始まらないJSON配列の解析にバグがあることがわかります[

httpサーバーから返される応答を変更する以外は、この問題の回避策はありません。

これに関する内部バグを開きました。このバグを見つけるのを手伝ってくれてありがとう。

于 2013-03-10T11:47:40.550 に答える
3

returnedContentType を "plain" に変更できます。これにより、WL サーバーはコンテンツを大きな文字列として返し、解析を試みません。次に、アダプターで var obj = JSON.parse(response.text) を使用できます

于 2013-03-12T06:16:33.987 に答える