首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理KRL中的响应

处理KRL中的响应
EN

Stack Overflow用户
提问于 2010-12-18 06:42:47
回答 1查看 108关注 0票数 3

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

代码语言:javascript
复制
handleResponse({ "data": { "responses": [ { "response": "successful" } ] } } );

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-18 07:08:19

更新:查看Google translate API之后,它看起来JSONP回调参数是可选的。不指定回调,您将不再有此问题。:)

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

更好的选项:

如果可以,在对google API的调用中指定没有回调函数。如果您可以只请求普通的JSON而不是JSONP,那么您可以只使用pick操作符。

不是更好的选择:

如果API只返回JSONP,那么您可以执行正则表达式替换来从JSON中删除填充,这将允许您使用pick操作符。

您需要的内容:

使用beesting或encode function

  • Replace function

  • Decode function

  • Pick operator

将返回的

  • 转换为字符串

完整的应用示例:

代码语言:javascript
复制
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);
      |>;
    }
  }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4475402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档