从JSONP中提取函数的JSON参数
我有一个json响应里面有一个函数调用。 它parsing后看起来像string
"foo({a: 5}, 5, 100)"
我怎样才能提取函数调用的第一个参数(在这种情况下是{a: 5}
)?.
更新
这是从服务器端的代码
var request = require('request') , cheerio = require('cheerio'); var url = 'http://www.google.com/dictionary/json?callback=dict_api.callbacks.id100&q=test&sl=en&tl=en'; request({url: url, 'json': true}, function(error, resp, body){ console.log(typeof JSON.parse(body)); // => string });
Google Dictionary API(没有logging)使用JSONP,它不是真正的JSON,所以你不能在你的node.js中使用它(就像你在评论中提到的那样)。 你将不得不eval()
的回应。
注意查询参数是如何有callback=dict_api.callbacks.id100
? 这意味着返回的数据将如下返回: dict_api.callbacks.id100(/* json here */, 200, null)
所以,你有两个select:1:在你的代码中创build一个函数:
var dict_api = { callbacks: { id100: function (json_data) { console.log(json_data); }}; request({url: url, 'json': true}, function(error, resp, body){ // this is actually really unsafe. I don't recommend it, but it'll get the job done eval(body); });
或者,你可以从开始( dict_api.callbacks.id100(
)和end( ,200,null)
[假设这将始终是相同的]),然后JSON.parse()
得到的string。
request({url: url, 'json': true}, function(error, resp, body){ // this is actually really unsafe. I don't recommend it, but it'll get the job done var json_string = body.replace('dict_api.callbacks.id100(', '').replace(',200,null)', ''); console.log(JSON.parse(json_string)); });
foo({a: 5}, 5, 100); function foo(){ var the_bit_you_want = arguments[0]; console.log(the_bit_you_want); }
这很简单,在你的foo-function中使用下面的代码:
arguments[0];