Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在保留对象键顺序的同时修改JSON文件_Json_Node.js_Object - Fatal编程技术网

在保留对象键顺序的同时修改JSON文件

在保留对象键顺序的同时修改JSON文件,json,node.js,object,Json,Node.js,Object,在NodeJS中解析JSON文件,对其进行细微修改,然后将其写回磁盘,而不更改其中任何对象的任何键的顺序,这是一种好方法吗 为了解决通常的问题,“但是JSON不能保证密钥顺序!你所做的不是JSON!你会为每个人破坏互联网!” 人类经常处理JSON配置文件。即使关键顺序对项目没有意义,他们也可能以某种方式组织了项目,不希望看到这样的变化 JSON文件通常提交到源代码管理中。无故更改密钥顺序会导致修订历史垃圾邮件 JSON文件通常用于互操作性。仅仅因为我的程序是纯粹的、神圣的、符合标准的,并不意味

在NodeJS中解析JSON文件,对其进行细微修改,然后将其写回磁盘,而不更改其中任何对象的任何键的顺序,这是一种好方法吗

为了解决通常的问题,“但是JSON不能保证密钥顺序!你所做的不是JSON!你会为每个人破坏互联网!”

  • 人类经常处理JSON配置文件。即使关键顺序对项目没有意义,他们也可能以某种方式组织了项目,不希望看到这样的变化
  • JSON文件通常提交到源代码管理中。无故更改密钥顺序会导致修订历史垃圾邮件
  • JSON文件通常用于互操作性。仅仅因为我的程序是纯粹的、神圣的、符合标准的,并不意味着它可以与其他程序进行互操作
因此:显然这还不够:

var j = require('myfile.json');
...
fs.writeFileSync('myfile.json', JSON.stringify(j));

如果不从头开始编写完整的解析器,如何做到这一点呢?

这取决于“微小的修改”。您是在添加新键还是仅仅修改值。主要是修改现有值。在我目前的具体案例中,我在树的较低级别添加了一些键,但我不关心这些键周围的键的顺序是否被保留,但我关心的是顶级键是否被保留。您是否进行了测试以确保在现实世界中它没有保留顺序?即使它确实保留了顺序,那么间距呢?当库特别不保证这种行为时,很难测试这样的东西。假设它对我机器上的一个给定文件有效…现在怎么办?在另一台机器上测试?不同版本的NodeJS?更大的文件?在什么情况下,我可以相信这种未记录的行为是可靠的?下一个版本的NodeJS呢?等