1

内部に関数呼び出しがある 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
});
4

3 に答える 3

2

Google Dictionary API(文書化されていない)はJSONPを使用しますが、これは実際にはJSONではないため、node.jsで(コメントに記載されているように)希望どおりに使用することはできません。あなたはeval()応答する必要があります。

クエリパラメータがどのようになっているのかに注目してcallback=dict_api.callbacks.id100ください。つまり、返されるデータは次のように返されます。dict_api.callbacks.id100(/* json here */, 200, null)

したがって、2つのオプションがあります。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);
});

または、開始(dict_api.callbacks.id100()と終了(,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));
});
于 2013-02-08T02:29:28.557 に答える
2
foo({a: 5}, 5, 100);

function foo(){
    var the_bit_you_want = arguments[0];
    console.log(the_bit_you_want); 
}
于 2013-02-08T02:19:06.540 に答える
2

それは非常に簡単です。foo 関数で次を使用します。

arguments[0];
于 2013-02-08T02:19:39.363 に答える