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

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

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)

我能够记录在正文中检索到的 JSON 字符串,它对我来说看起来没问题,所以我猜我的解析错误。

编辑:

正文的第一个字符如下所示:

> body.substring(1,250)
'{"@context":"http://iiif.io/api/presentation/2/context.json",\n"@id": "http://iiif.nli.org.il/collections/danhadani.json",\n"@type":"sc:Collection",\n"label":"Dan Hadani Collection", \n"attribution":[{"@value":"The National Library of Israel","@language'

最佳答案

指定编码后测试并工作:

{encoding:'utf8'}

看来您请求的特定网址并没有指定它在响应 header 中的编码,因此我们必须像这样手动设置它:

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

关于javascript - 发出 HTTP 请求并将结果解析为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47540482/

相关文章:

javascript 添加或合并到对象

node.js - 如何从 Node.js 连接到 Amazon DocumentDB

java - 使用 GSON 解析 JSON 数组

json - django REST框架,验证json数据

node.js - package.json 中的波浪号 (~) 和插入符号 (^) 有什么区别?

Node.js:你如何处理循环中的回调?

javascript - Chrome 扩展 API 未触发 onChanged 事件

php - 将 XMLHttpRequests 发送到不同的脚本或一个委托(delegate)任务的主脚本更好吗?

javascript - DataTables jQuery 插件 - Firefox 声称 "illegal character"

json - 从 Twitter JSON 文件中提取列名