在不改变顺序的情况下浏览已经存在的对象

我知道,对象的属性不保证以任何特定的顺序存储或读取。

我遇到的问题是不能使用对象或数组。 我已经有一个很大的和非常嵌套的JSON文件,像这样:

{ "occasion": 23, "mayorstips": { "1": 0, "3": 0, "2": 0... 

我只需要做一些修改。 这是我开始使用它的方式:

 var campaign = JSON.parse(fs.readFileSync(theJSONFile)); for(var plot in plots) { if(plots.hasOwnProperty(plot)) { switch(plots[plot].province) { case 'forest': ... 

当我完成后,我只是把它放回:

 fs.writeFileSync(theJSONFile, JSON.stringify(campaign)); 

现在,我注意到了这个方法的两个问题:

  1. 原始间距格式丢失。 原始文件只是一个很长的行 ,需要一个长的行,所以任何JSON库的格式化尝试都没有帮助。 我解决了几个正则expression式replace。
  2. 现在“JSON行”文件被sorting 。 所以我从{ "1": 0, "3": 0, "2": 0{ "1": 0, "2": 0, "3": 0 ,结果是一个大问题。
  3. 0结尾的浮点数被截断 。 这个文件需要浮点数总是有六位小数,例如34.293800 。 但是当我打开它时,数字变成了34.2938

这是一个3.5万字的行。 这是如何解决问题#2和#3? 我可以做另一个正则expression式replace#3,但也许有一些我错过了。

看问题和评论,它是string操作。 我不完全知道你想要用数据做什么,但是,如果json使你的数据处理容易,你可以做两者的组合。

  1. 比方说,你读它作为string,在这一点上,使用正则expression式,你存储的顺序1,3,2在{ "1": 0, "3": 0, "2": 0...在一个数组中,也在需要维护0的数字周围添加引号。
  2. 现在将这个string转换成json。
  3. 处理您的数据
  4. 将json转换回string(同时将您在步骤1中创build的数组转换回所需的格式{ "1": 0, "3": 0, "2": 0... in string)

也看看这个问题如何保持一个JavaScript对象/数组有序,同时也保持密钥查找?

希望有所帮助。 祝一切顺利!