Javascript 动态添加到JSON文件
我有一个json文件,通过使用爬虫获取页面的值来动态生成,json创建如下:Javascript 动态添加到JSON文件,javascript,json,fs,Javascript,Json,Fs,我有一个json文件,通过使用爬虫获取页面的值来动态生成,json创建如下: { "temperatura":"31°C", "sensacao":"RealFeel® 36°", "chuva":"0 mm", "vento":"NNO11km/h", "momentoAtualizacao":"Dia", "Cidade":"carazinho", "Site":"Accuweather" } { "temperatura":"29 º", "sensacao":"29º ST", "ven
{
"temperatura":"31°C",
"sensacao":"RealFeel® 36°",
"chuva":"0 mm",
"vento":"NNO11km/h",
"momentoAtualizacao":"Dia",
"Cidade":"carazinho",
"Site":"Accuweather"
}
{
"temperatura":"29 º",
"sensacao":"29º ST",
"vento":"11 Km/h",
"umidade":"51% UR",
"pressao":"1013 hPa",
"Cidade":"carazinho",
"Site":"Tempo Agora"
}
此生成文件的问题是缺少[]来连接数组中的所有文件,缺少逗号来分隔文件。
最终的json应该如下所示:
[{
"temperatura":"31°C",
"sensacao":"RealFeel® 36°",
"chuva":"0 mm",
"vento":"NNO11km/h",
"momentoAtualizacao":"Dia",
"Cidade":"carazinho",
"Site":"Accuweather"
},
{
"temperatura":"29 º",
"sensacao":"29º ST",
"vento":"11 Km/h",
"umidade":"51% UR",
"pressao":"1013 hPa",
"Cidade":"carazinho",
"Site":"Tempo Agora"
}]
我目前正在使用此代码生成json
const climatempo = async (config) => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
const override = Object.assign(page.viewport(), {width: 1920, heigth:1024});
await page.setViewport(override);
await page.goto(config.cidades[cidade],{waitUntil: 'load',timeout:'60000'})
if(siteEscolhido == "accu"){
const elementTemp = await page.$(config.regras.elementTemp)
const temperatura = await page.evaluate(elementTemp => elementTemp.textContent, elementTemp)
const sensacaoElement= await page.$(config.regras.sensacaoElement)
const sensacao = await page.evaluate(sensacaoElement => sensacaoElement.textContent, sensacaoElement)
const chuvaElement = await page.$(config.regras.chuvaElement)
const chuva = await page.evaluate(chuvaElement => chuvaElement.textContent, chuvaElement)
const ventoElement = await page.$(config.regras.ventoElement)
const vento = await page.evaluate(ventoElement => ventoElement.textContent, ventoElement)
const atualizadoA = await page.$(config.regras.atualizadoA)
const momentoAtualizacao = await page.evaluate(atualizadoA => atualizadoA.textContent, atualizadoA)
var dado = {
temperatura:temperatura,
sensacao:sensacao,
chuva:chuva,
vento:vento,
momentoAtualizacao:momentoAtualizacao,
Cidade:cidade,
Site:"Accuweather"
}
//dados.push(dado)
var x = JSON.stringify(dado)
fs.appendFile('climatempo.json',x,function(err){
if(err) throw err
})
console.log("Temperatura:" + temperatura)
console.log(sensacao)
console.log("Vento:" + vento)
console.log("chuva:" + chuva)
console.log(momentoAtualizacao)
await browser.close()
如果有人知道如何解决我的问题,请告诉我
非常感谢,Carlos,我建议您先读取该文件,将其放入从该文件捕获的数组中,然后将该文件写回磁盘 假设文件中已包含数组形式的内容:
let fileDado = JSON.parse(fs.readFileSync('climatempo.json'));
fileDado.push(dado);
fs.writeFileSync('climatempo.json', JSON.stringify(fileDado));
我建议读取该文件,将其放入从该文件捕获的阵列中,然后将该文件写回磁盘 假设文件中已包含数组形式的内容:
let fileDado = JSON.parse(fs.readFileSync('climatempo.json'));
fileDado.push(dado);
fs.writeFileSync('climatempo.json', JSON.stringify(fileDado));
我建议做得稍微不同一点 我将尝试用伪代码解释,因为我不理解您的变量名
我建议做得稍微不同一点 我将尝试用伪代码解释,因为我不理解您的变量名
与传统的修改不同,在json的情况下,您不希望打开并只是追加。您需要先打开该文件,获取该内容,附加新的json内容并替换现有文件的内容。该文件将有多大?如果是成百上千条记录,我不同意每次只为添加一条记录而解析整个文件的建议。不同于传统的修改,在json的情况下,您不想打开并只是附加。您需要先打开该文件,获取该内容,附加新的json内容并替换现有文件的内容。该文件将有多大?如果是成百上千条记录,我不同意每次只为添加一条记录而解析整个文件的建议。但每个人都有自己的。