【问题标题】:Adding dynamically to a JSON file动态添加到 JSON 文件
【发布时间】:2019-06-23 01:26:10
【问题描述】:

我有一个 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",
"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() 

如果有人知道如何解决我的问题,请告诉我!

感谢,卡洛斯

【问题讨论】:

  • 与传统的修改不同,如果是 json,您不想打开并只是追加。您将需要首先打开文件获取该内容,附加新的 json 内容并替换现有文件的内容。
  • 这个文件有多大?如果它将是数百或数千条记录,我不同意每次解析整个文件只是添加一条记录的建议。但各有各的。

标签: javascript json fs


【解决方案1】:

我建议读取文件,推送到从该文件捕获的数组,然后将文件写回磁盘。

假设文件已经有数组形式的内容:

let fileDado = JSON.parse(fs.readFileSync('climatempo.json'));

fileDado.push(dado);

fs.writeFileSync('climatempo.json', JSON.stringify(fileDado));

【讨论】:

    【解决方案2】:

    我建议做一些不同的事情

    我会尝试用伪代码解释,因为我不明白你的变量名

    1. 读取json文件
    2. 数组 = JSON.parse(fileContents)
    3. array.push(newItem)
    4. newContents = JSON.stringify(array)
    5. 文件写入(不附加)newContents

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2016-09-27
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2015-12-22
      相关资源
      最近更新 更多