Javascript 从JSONP中提取函数的JSON参数

Javascript 从JSONP中提取函数的JSON参数,javascript,json,node.js,Javascript,Json,Node.js,我有一个json响应,里面有一个函数调用。解析后看起来像字符串 "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&

我有一个json响应,里面有一个函数调用。解析后看起来像字符串

"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
});

很简单,在foo函数中使用以下内容:

arguments[0];

很简单,在foo函数中使用以下内容:

arguments[0];

Google Dictionary API undocumented使用JSONP,而JSONP不是真正的JSON,因此您不能在node.js中使用它,正如您在评论中所指出的那样。你得评估一下反应

请注意查询参数的callback=dict_api.callbacks.id100?这意味着返回的数据将像这样返回:dict_api.callbacks.id100/*json here*/,200,null

因此,您有两个选项:1:在代码中创建函数:

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);
});
或者,您可以提取start dict_api.callbacks.id100和end,200,null[假设这始终是相同的],然后对结果字符串进行JSON.parse

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));
});

Google Dictionary API undocumented使用JSONP,而JSONP不是真正的JSON,因此您不能在node.js中使用它,正如您在评论中所指出的那样。你得评估一下反应

请注意查询参数的callback=dict_api.callbacks.id100?这意味着返回的数据将像这样返回:dict_api.callbacks.id100/*json here*/,200,null

因此,您有两个选项:1:在代码中创建函数:

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);
});
或者,您可以提取start dict_api.callbacks.id100和end,200,null[假设这始终是相同的],然后对结果字符串进行JSON.parse

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));
});

如果有函数调用,它就不是JSON响应。这不是JSON。也许你得到了一个JSONP响应?我不是很确定,我是从这个链接得到的,显示你正在用的ajax代码,我正在node.js中从服务器端检索。不确定它是否相关,但我会很快更新我的问题。如果它有一个函数调用,这不是JSON响应。这不是JSON。也许你得到了一个JSONP响应?我不是很确定,我是从这个链接得到的,显示你正在用的ajax代码,我正在node.js中从服务器端检索。不确定是否相关,但我将很快更新我的问题。