javascript - 修改我的json

时间:2016-12-06 09:25:05

标签: javascript json

我有一个想要修改的json对象。这是数据:

var data1 = {
  "a@1.0.3": {
    "b@2.3.0": {
      "c@2.0.0": {
        "d@0.4.0": {
          "e@1.1.1": {}
        },
        "f@0.5.3": {}
      },
      "j@2.15.2": {
      "x@1.2.3": {}
      }
    },
    "i@1.5.8": {}
  }
};

基本上对于每个键,'@'的左侧我想要添加字符右侧和右侧的每个数字的char +,将所有'.'替换为'-'。例如,如果密钥是' abcd@1.12.4',我的新密钥将为'abcd17@1-12-4'。 对于这个例子,我想要这个结果:

var data2 = {
      "a4@1-0-3": {
        "b5@2-3-0": {
          "c2@2-0-0": {
            "d4@0-4-0": {
              "e3@1-1-1": {}
            },
            "f8@0-5-3": {}
          },
          "j19@2-15-2": {
          "x6@1-2-3": {}
          }
        },
        "i14@1-5-8": {}
      }
    };
你可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

Here是一个工作小提琴。代码是:

var data1 = {
  "a@1.0.3": {
    "b@2.3.0": {
      "c@2.0.0": {
        "d@0.4.0": {
          "e@1.1.1": {}
        },
        "f@0.5.3": {}
      },
      "j@2.15.2": {
      "x@1.2.3": {}
      }
    },
    "i@1.5.8": {}
  }
};

console.log(JSON.stringify(fixData(data1)));

function fixData(data) {
    var result = {};
    for (var key in data) {
    if (data.hasOwnProperty(key)) {
        if (key.indexOf("@") == -1)
        continue; // Ignore keys without @'s

        var parts = key.split("@");
      var left = parts[0];
      var right = parts[1];

      // Replace .'s with -'s
      while (right.indexOf(".") > -1) {
        right = right.replace(".", "-");
      }

      // Add up values
      var num = 0;
      var splits = right.split("-");
      for (var i = 0; i < splits.length; i++) {
        var chars = splits[i];
        if (!isNaN(chars)) {
            num += parseInt(chars);
        }
      }
      left += num;

      // Replace key
      var existing = data[key];
      result[left+"@"+right] = fixData(existing);
    }
  }

  return result;
}

这给出了:

{  
   "a4@1-0-3":{  
      "b5@2-3-0":{  
         "c2@2-0-0":{  
            "d4@0-4-0":{  
               "e3@1-1-1":{  

               }
            },
            "f8@0-5-3":{  

            }
         },
         "j19@2-15-2":{  
            "x6@1-2-3":{  

            }
         }
      },
      "i14@1-5-8":{  

      }
   }
}