在不改变顺序的情况下浏览已经存在的对象
我知道,对象的属性不保证以任何特定的顺序存储或读取。
我遇到的问题是不能使用对象或数组。 我已经有一个很大的和非常嵌套的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));
现在,我注意到了这个方法的两个问题:
- 原始间距格式丢失。 原始文件只是一个很长的行 ,需要一个长的行,所以任何
JSON
库的格式化尝试都没有帮助。 我解决了几个正则expression式replace。 - 现在“JSON行”文件被sorting 。 所以我从
{ "1": 0, "3": 0, "2": 0
到{ "1": 0, "2": 0, "3": 0
,结果是一个大问题。 - 以0结尾的浮点数被截断 。 这个文件需要浮点数总是有六位小数,例如34.293800 。 但是当我打开它时,数字变成了34.2938 !
这是一个3.5万字的行。 这是如何解决问题#2和#3? 我可以做另一个正则expression式replace#3,但也许有一些我错过了。
看问题和评论,它是string操作。 我不完全知道你想要用数据做什么,但是,如果json使你的数据处理容易,你可以做两者的组合。
- 比方说,你读它作为string,在这一点上,使用正则expression式,你存储的顺序1,3,2在
{ "1": 0, "3": 0, "2": 0...
在一个数组中,也在需要维护0的数字周围添加引号。 - 现在将这个string转换成json。
- 处理您的数据
- 将json转换回string(同时将您在步骤1中创build的数组转换回所需的格式
{ "1": 0, "3": 0, "2": 0...
in string)
也看看这个问题如何保持一个JavaScript对象/数组有序,同时也保持密钥查找?
希望有所帮助。 祝一切顺利!