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

Modify a JSON file while preserving object key order

提问人:Steve Bennett 提问时间:9/15/2016 最后编辑:Steve Bennett 更新时间:9/28/2016 访问量:676

问:

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

为了解决通常的担忧,“但 JSON 不能保证密钥顺序!你正在做的不是 JSON!你会为每个人打破互联网!

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

所以:显然这还不够:

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

如果不从头开始编写完整的解析器,这怎么能做到呢?

JSON 节点 .js 对象

评论

0赞 Sikorski 9/15/2016
这取决于“小修改”。您是添加新键还是只是修改值。
0赞 Steve Bennett 9/15/2016
主要是修改现有值。在我目前的具体情况下,我在树的较低级别添加一些键,但我不在乎这些键周围的键顺序是否保留 - 但我确实关心是否保留了顶级键。
0赞 9/28/2016
您是否进行了测试以确保在现实世界中它尚未保留订单?即使它确实保留了顺序,间距呢?
0赞 Steve Bennett 9/28/2016
当一个库特别不保证这种行为时,真的很难测试这样的事情。假设它适用于我机器上的一个给定文件......现在怎么办?在另一台机器上测试?不同版本的 NodeJS?文件更大?在什么情况下,我可以相信这种无证行为是可靠的?NodeJS的下一个版本呢?等。

答: 暂无答案