Javascript 发出HTTP请求并将结果解析为JSON

Javascript 发出HTTP请求并将结果解析为JSON,javascript,json,node.js,http,request,Javascript,Json,Node.js,Http,Request,我想下载一个JSON并解析它。我尝试了以下方法: var request = require('request'); var url = "http://iiif.nli.org.il/collections/danhadani.json" var result = request(url , function(error, response, body) { console.log("Fin"); JSON.parse(body)

我想下载一个JSON并解析它。我尝试了以下方法:

    var request = require('request');
    var url = "http://iiif.nli.org.il/collections/danhadani.json"
    var result = request(url , function(error, response, body) {
          console.log("Fin");
          JSON.parse(body);
     });

undefined
> Fin
Fin
SyntaxError: Unexpected token 
    at Object.parse (native)
    at Request._callback (repl:1:81)
    at Request.self.callback (/home/artium/Projects/nlihack-team-m7/node_modules/request/request.js:186:22)
    at emitTwo (events.js:87:13)
    at Request.emit (events.js:172:7)
    at Request.<anonymous> (/home/artium/Projects/nlihack-team-m7/node_modules/request/request.js:1163:10)
    at emitOne (events.js:77:13)
    at Request.emit (events.js:169:7)
    at IncomingMessage.<anonymous> (/home/artium/Projects/nlihack-team-m7/node_modules/request/request.js:1085:12)
    at IncomingMessage.g (events.js:260:16)

指定编码后测试并工作:

{encoding:'utf8'}
您正在请求的特定url似乎与响应标头中的编码不一致,因此我们必须手动将其设置为:

 request(u ,{encoding:'utf8'}, 
   function(error, response, body) { console.log("Fin");  JSON.parse(body)  })

指定编码后测试并工作:

{encoding:'utf8'}
您正在请求的特定url似乎与响应标头中的编码不一致,因此我们必须手动将其设置为:

 request(u ,{encoding:'utf8'}, 
   function(error, response, body) { console.log("Fin");  JSON.parse(body)  })
试试这个:

var request = require('request');
var url = "http://iiif.nli.org.il/collections/danhadani.json";

var options = {
  uri: url,
  method: 'GET',
  json : true,
  encoding: 'utf8'
};

var r = request(options , function(error, response, body) { 
    console.log("Fin");
    // now you have an Array(43515) of objects on body.members without the need of parsing.
    console.log(`The first object in the json file is: ${body.members[0]}`);
});
您将以对象数组的形式获取数据(由于该json文件的格式)

我试过这个密码,它成功了

בהצלהה

试试这个:

var request = require('request');
var url = "http://iiif.nli.org.il/collections/danhadani.json";

var options = {
  uri: url,
  method: 'GET',
  json : true,
  encoding: 'utf8'
};

var r = request(options , function(error, response, body) { 
    console.log("Fin");
    // now you have an Array(43515) of objects on body.members without the need of parsing.
    console.log(`The first object in the json file is: ${body.members[0]}`);
});
您将以对象数组的形式获取数据(由于该json文件的格式)

我试过这个密码,它成功了


בהצלהה

您的代码看起来是正确的。如果您使用
console.log(body)
console.log(“Fin”)
@samanime,您会得到什么?我会得到一个字符串,里面看起来像json。这是一个巨大的文件,我将用第一个字符更新问题。我这样问是因为你的代码应该很好。将JSON字符串放入
JSON.parse(body)
应该可以正常工作。否则,JSON中可能存在语法错误。您可以在联机解析器上运行它,看看它说了什么。@samanime是的,我是通过jsonlint运行的。至少我在通过firefox下载json后得到的。啊,是的,这确实有道理。看起来JSON有非ASCII字符,所以当它遇到这些字符时,可能会感到困惑。通常情况下,当它出现时,头应该指定它是UTF-8,但是看起来没有指定头,所以您必须自己提供它。您的代码看起来是正确的。如果您使用
console.log(body)
console.log(“Fin”)
@samanime,您会得到什么?我会得到一个字符串,里面看起来像json。这是一个巨大的文件,我将用第一个字符更新问题。我这样问是因为你的代码应该很好。将JSON字符串放入
JSON.parse(body)
应该可以正常工作。否则,JSON中可能存在语法错误。您可以在联机解析器上运行它,看看它说了什么。@samanime是的,我是通过jsonlint运行的。至少我在通过firefox下载json后得到的。啊,是的,这确实有道理。看起来JSON有非ASCII字符,所以当它遇到这些字符时,可能会感到困惑。通常情况下,报头应该在传入时指定它是UTF-8,但看起来没有指定报头,所以您必须自己提供。@artium,仍在检查为什么编码是正确的issue@artium,仍在检查编码问题的原因