在javascript中替换密钥JSON

Mat*_*ell 2 javascript json

假设我有一个像JSON这样的对象

var myjson = {
   "com.mycompany.top.Element" : {
      "com.mycompany.top.count" : 10,
      "com.mycompany.top.size" : 0
      ....
   }
};
Run Code Online (Sandbox Code Playgroud)

我想用冒号替换键中的点/句点,以便JSON变为:

var myjson = {
   "com:mycompany:top:Element" : {
      "com:mycompany:top:count" : 10,
      "com:mycompany:top:size" : 0
      ....
   }
};
Run Code Online (Sandbox Code Playgroud)

来自Doublos Crockford的JSON2只是替换了值而不是键.想知道是否有其他人写过正则表达式或解析器来替换组成密钥的文本?

Gum*_*mbo 10

你可以使用这个递归函数:

function rewriteProperties(obj) {
    if (typeof obj !== "object") return obj;
    for (var prop in obj) {
        if (obj.hasOwnProperty(prop)) {
            obj[prop.replace(/\./g, ":")] = rewriteProperties(obj[prop]);
            if (prop.indexOf(".") > -1) {
                delete obj[prop];
            }
        }
    }
    return obj;
}
Run Code Online (Sandbox Code Playgroud)