在不改变顺序

时间:2016-07-14 06:45:26

标签: javascript arrays json node.js

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

我遇到的问题是我不能使用对象或数组。我已经有一个像这样的大而且非常嵌套的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库的任何格式化尝试都没有用。我用一些正则表达式替换来解决它。
  2. 现在“JSON行”文件已排序。所以我从{ "1": 0, "3": 0, "2": 0转到{ "1": 0, "2": 0, "3": 0,结果证明这是个大问题。
  3. 0结尾的浮点数被截断。此文件需要浮点数始终具有六位小数,例如 34.293800 。但是当我打开它时,数字会变为 34.2938
  4. 这是一个35,000个字符行。这是我如何解决问题#2和#3?我可以做另一个正则表达式取代#3但也许有一些我缺少的东西。

1 个答案:

答案 0 :(得分:1)

查看问题和评论,它是字符串操作。 我不知道你想对数据做什么,但是,如果json使你的数据处理变得容易,你可以将两者结合起来。

  1. 让我们说你把它读成字符串,在这一点上使用正则表达式,你将{ "1": 0, "3": 0, "2": 0...中的1,3,2的顺序存储在一个数组中,同时在你需要维护0的数字周围添加引号。 / LI>
  2. 现在将此字符串转换为json。
  3. 处理您的数据
  4. 将json转换回字符串(将您在步骤1中创建的数组转换回字符串中所需的格式User.where(instance_eval("{#{string}}"))
  5. 另请看这个问题 IllegalArgumentException

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