3

我正在使用 KRL 通过他们的 API 向谷歌发送一个请求,这是我从他们那里得到的文字响应:

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

您如何建议我通过 pick 处理它,因为它不是“有效”的 JSON 语法?它包含有效的 JSON 语法,但作为一个整体是无效的。谢谢你的帮助。

4

1 回答 1

5

更新:查看 Google 翻译 API 后,看起来 JSONP 回调参数是可选的。不要指定回调,您将不再遇到此问题。:)

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

更好的选择:

如果可以,请在调用 google API 时指定没有回调函数。如果您可以只请求纯 JSON 而不是 JSONP,则可以使用 pick 运算符。

不是更好的选择:

如果 API 仅返回 JSONP,那么您可以执行正则表达式替换以从 JSON 中删除填充,这将允许您使用选择运算符。

你需要什么:

完整的应用示例:

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 回答