我正在使用KRL通过他们的API向google发送请求,这是我从他们那里得到的文字响应:
handleResponse({ "data": { "responses": [ { "response": "successful" } ] } } );你建议我如何通过pick来处理它,因为它不是“有效的”JSON语法?它包含有效的JSON语法,但作为一个整体是无效的。谢谢你的帮助。
发布于 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
将返回的
完整的应用示例:
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);
|>;
}
}
}https://stackoverflow.com/questions/4475402
复制相似问题