Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Javascript 在不改变顺序的情况下遍历已存在的对象_Javascript_Arrays_Json_Node.js - Fatal编程技术网

Javascript 在不改变顺序的情况下遍历已存在的对象

Javascript 在不改变顺序的情况下遍历已存在的对象,javascript,arrays,json,node.js,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

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

我的问题是,使用对象或数组不是我的责任。我已经有一个非常大的嵌套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
    库的任何格式化尝试都没有帮助。我用几个正则表达式替换了它
  • 现在,“JSON行”文件已排序。所以我从
    {1:0,3:0,2:0
    {1:0,2:0,3:0
    ,这是一个大问题
  • 0结尾的浮点数被截断。。此文件需要浮点数始终具有六位小数,例如,34.293800。但当我打开它时,数字将更改为34.2938

  • 这是一个3.5万字符的行。这是我如何解决问题2和3?我可以用另一个正则表达式替换3,但也许我遗漏了一些东西。

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

  • 假设您将其作为字符串读取,此时使用正则表达式将1,3,2的顺序存储在
    {“1”:0,“3”:0,“2”:0…
    的数组中,并在需要保持0的数字周围添加引号
  • 现在将此字符串转换为json
  • 处理数据
  • 将json转换回字符串(同时将您在步骤1中创建的数组转换回字符串中所需的格式
    {“1”:0,“3”:0,“2”:0…
  • 也来看看这个问题


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

    你正在阅读的json文件,是你创建的还是你从某处获得的?如果是你创建的,我强烈建议更改其结构。如果任何地方的顺序对你来说都很重要,最好将它们保留在数组中,而不是对象属性中。如果0对你来说很重要,请将这些数字保留在stringsIt中这不取决于他。我看到的唯一选择是将数据推入数组以保持顺序,然后将其转换回。这不能完全用JSON来完成,因为每个JS引擎对其进行不同的排序。对于这样一个受限的用例,我建议进行字符串操作,进行子字符串搜索并找到键及其值。然后替换/操作字符串。考虑到您的限制,虽然这种方法效率低下……@shinobi它不是我创建的,这就是问题所在。这是一个软件的输出,我正试图根据自己的喜好修改它,它似乎对排序和所有其他东西都很挑剔。@NidhinDavid恐怕您是对的,它实际上是我拥有的代码的一半现在使用正则表达式替换。我只是在寻找我没有的好主意。我正在进行字符串操作,基本上是纯正则表达式。关于你的答案,解析/字符串化方法会搞乱顺序…除非我正确理解你,否则它会有同样的问题。是的,但我要求你阅读首先作为文本文件,然后从该文本(字符串)中首先将顺序存储在数组中的某个位置。然后将其解析为json。虽然现在更改了顺序,但数组中仍然有正确的顺序。因此,当重新字符串化时,您将从数组中选择顺序。希望这是清楚的。