我正在尝试使用以下代码从api网站获取JSON文件,但是当我使用以下代码获取时,出现错误消息“ JSON输入意外结束”
var express = require("express");
var app = express();
var body = require("body-parser");
var https = require("https");
app.get("/results", function (req, res) {
https.get("https://www.omdbapi.com/?apikey=d49698c3&s=harry", function (response) {
response.on("data", function (data) {
var got = JSON.parse(data);
res.send(got.Title);
})
})
});
您的代码中有两个错误的假设。
1-查看数据,您可以看到属性Title在Search属性中的每个单个对象中,该属性为Array
,因此当JSON正确解析时,您将遇到问题got.Title
2-可以多次调用对象响应的事件数据,直到获得所有数据为止,每次调用它时,您都会收到一部分数据。
发送完所有数据后,将调用end事件,并可以解析JSON。
您的代码正在尝试解析不完整的JSON字符串,仅是第一个块。
最常见的方法是在函数外部声明一个数组,该数组将处理事件数据并结束。对于每个数据事件,您都将块推送到外部数组中,并在最终事件中将其串联起来。
看一下这个:
var express = require('express')
var app = express()
var body = require('body-parser')
var https = require('https')
app.get('/results', function (req, res) {
https.get('https://www.omdbapi.com/?apikey=d49698c3&s=harry', function (response) {
const chunks = []
response.on('data', function (chunk) {
chunks.push(chunk)
})
response.on('end', function () {
const data = Buffer.concat(chunks)
var got = JSON.parse(data)
// Try this one out as well
// res.json(got)
res.send(got.Search[0].Title)
})
})
})
app.listen(3000)
我刚刚测试了上面的代码,它的工作原理很吸引人。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句