3

KRLを使用してAPI経由でGoogleにリクエストを送信しています。これは、Googleから返される文字通りの応答です。

handleResponse({ "data": { "responses": [ { "response": "successful" } ] } } );

これは「有効な」JSON構文ではないため、pickを使用してこれを処理することをどのように推奨しますか?有効なJSON構文が含まれていますが、全体としては無効です。ご協力いただきありがとうございます。

4

1 に答える 1

5

更新:Google翻訳APIを見ると、JSONPコールバックパラメーターはオプションのようです。コールバックを指定しないでください。そうすれば、この問題は発生しなくなります。:)

http://code.google.com/apis/language/translate/v2/using_rest.html#WorkingResults

より良いオプション:

可能であれば、Google APIの呼び出しで、コールバック関数がないことを指定します。JSONPの代わりにプレーンJSONをリクエストできる場合は、pick演算子を使用できます。

それほど良いオプションではありません:

APIがJSONPのみを返す場合は、正規表現の置換を実行してJSONからパディングを削除できます。これにより、pick演算子を使用できるようになります。

必要なもの:

完全なアプリの例:

ruleset a60x494 {
  meta {
    name "jsonp-to-json-test"
    description <<
      jsonp-to-json-test
    >>
    author "Mike Grace"
    logging on
  }

  global {
    returnedJsonpAsString = 'handleResponse({ "data": { "responses": [ { "response": "successful" } ] } } );';
    datasource googleApi <- "blah blah blah";
  }

  rule fix_jsonp_to_json {
    select when pageview ".*"
    pre {
      cleanJson = returnedJsonpAsString.replace(re/^.*\((.*)\);/,"$1");
      response = cleanJson.decode().pick("$..response");
    }
    {
      notify("Response",response) with sticky = true;
      emit <|
        console.log(returnedJsonp);
        console.log(cleanJson);
      |>;
    }
  }
}
于 2010-12-17T23:08:19.243 に答える