我如何JSON对网站的响应进行字符串化并使用FS将JSON字符串化响应保存到文件中?
这是我的代码但它没有转换为JSON:
var request = require("request")
var fs = require('fs');
var url = "http://rubycp.me/"
var http = require('http');
var file = fs.createWriteStream("file.json");
var url = http.get("http://rubycp.me/", function(response) {
JSON.stringify(response.pipe(file));
});
我只是想将页面的html转换为JSON并存储它 进入json文件。
答案 0 :(得分:1)
response
是一个不包含任何数据的流对象。您首先需要使用data
事件收集流的所有数据。如果收集了所有数据,则会触发end
事件,即使您可以对收集的数据进行字符串化并将其写入文件。
const fs = require('fs')
const http = require('http')
var url = 'http://rubycp.me/'
var file = fs.createWriteStream('file.json')
http.get(url, response => {
// list that will hold all received chunks
var result = []
response
.on('data', chunk => result.push(chunk)) // add received chunk to list
.on('end', () => {
file.write(JSON.stringify(Buffer.concat(result).toString())) // when all chunks are received concat, stringify and write it to the file
})
})
答案 1 :(得分:-1)
将其更改为JSON.stringify(response.body).pipe(file)
我推荐这个:
var fs = require('fs');
var http = require('http');
var url = http.get("http://rubycp.me/", function(response) {
var dat="";
response.on("data", function(chunk) {
console.log("BODY: " + chunk);
dat+=chunk;});
var x = JSON.stringify(dat);
fs.writeFile("file.json", x, function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
});
答案 2 :(得分:-1)
这种情况正在发生,因为您正在尝试将response
对象写入文件,而不是response.body
,这是JSON实际驻留的位置。试试这个:
var request = require("request")
var fs = require('fs');
var url = "http://rubycp.me/"
var http = require('http');
var url = http.get("http://rubycp.me/", function(res) {
res.on("data", function(chunk) {
console.log("BODY: " + chunk);
fs.writeFile("file.json", JSON.stringify(chunk), function(error) {
if (error) { return console.err(error) }
console.log('File was saved successfully');
});
});
});
答案 3 :(得分:-3)
在你进行字符串化之前,看起来你正在使用这个文件。回应。