创建相同的500 .json文件,但在每个文件中编辑两行

时间:2017-12-12 20:59:49

标签: json node.js

想要调整配置文件来运行程序,我得到了几行使脚本运行。但是我需要添加更多的单元,然后在.json中添加500个具有相同配置信息的文件,但是从每个文件中编辑两行。

如何在node.js中最简单地加载.json文件,删除配置中的两行并在每个最简单的内容中写入新行?

非常感谢您的帮助

我需要调整" secretCode"在每个文件中换一个新文件,即

<?php

    $dateTime=date("Y_m_d_H_i_s");
    $headers = "From: SOME ROBOT <somerobotyouusedtoknow@somecompany.com>\r\n" .
               "Reply-to: SOME HUMAN <somehumanyoudoknow@somecompany.com>";
               "Subject: My custom subject on including date of: " . $dateTime . "\r\n" .
    $emailto = "JayRizzo@somecompany.com";
    $emailbody = "This is the body of the email: Error message";

error_log($emailbody, 1, $emailto, $headers);

?>

1 个答案:

答案 0 :(得分:0)

下面你将找到如何替换文本文件中的一行以供参考和一个好的一行。但是你真的不应该使用这种方法来更新JSON文件。您需要的是解析JSON数据,以便您可以编辑数据并将编辑后的数据保存在文本文件中。

因此,我们不是在谈论这里的行,而是关于已经序列化为JSON格式的数据。必须更新存储的数据。

有很多问题,逐行编辑JSON文件可能会导致问题。最后,文件可能会损坏并使您的系统进入不良状态。

下面的两个实现都是同步的,因为初学者可能更容易理解。

在处理生产数据时,请务必始终创建备份。

如何操作

此脚本将解析json文件,更改secretCode并将其保存回同一文件。

var fs = require('fs');

function replaceDataInJsonFile(filePath, propertyName, newData) {
    // Read the complete file content into a tring.
    var fileText = fs.readFileSync(filePath, 'utf-8');
    // Create an object containing the data from the file.
    var fileData = JSON.parse(fileText);

    // Replace the secretCode in the data object.
    fileData[propertyName] = newData;

    // Create JSON, containing the date from the data object.
    fileText = JSON.stringify(fileData, null, "    ");
    // Write the updte file content to the disk.
    fs.writeFileSync(filePath, fileText, 'utf-8');
}

// Call the function above.
replaceDataInJsonFile('test.json', 'secretCode', 2233);

如何不这样做

此脚本将覆盖utf-8编码文件test.json的第四行。 test.json文件位于Node.js的执行目录中。

var fs = require('fs');

function replaceLineInFile(filePath, lineIndex, newLineText) {
    // Read the complete file content into a tring.
    var fileText = fs.readFileSync(filePath, 'utf-8');

    // Get line break chars.
    var lineBreakChars = '\r\n';
    if (fileText.indexOf(lineBreakChars) > -1) {
        lineBreakChars = '\n';
    }

    // Split the file content into an array of lines.
    var fileLines = fileText.split(lineBreakChars);

    // Overwrite a line from the array of lines.
    fileLines[lineIndex] = newLineText;

    // Join the line array elements into a single string again.
    fileText = fileLines.join(lineBreakChars);
    // Write the updte file content to the disk.
    fs.writeFileSync(filePath, fileText, 'utf-8');
}

// Call the function above.
replaceLineInFile('test.json', 3, '    "secretCode": 2233');

输入/输出文件

两个脚本都可以在输入文件中使用以下行,更新数据并将更新的数据写回文件。

在脚本执行之前,test.json的内容。

{
    "name": "James",
    "birthday": "March 22",
    "secretCode": 16309
}

执行node myscript.js后test.json的内容,myscript.js包含上面的代码。

{
    "name": "James",
    "birthday": "March 22",
    "secretCode": 2233
}