Javascript 什么';复制/克隆JSON对象结构的最有效方法是什么?

Javascript 什么';复制/克隆JSON对象结构的最有效方法是什么?,javascript,json,Javascript,Json,我猜这个标题很琐碎。基本上我想要的是mysqldump--没有数据…。例如,我有一个json对象,如下所示: { "key1" : "value1", "key2" : "value2", "key3" : { "key3a" : 1, "key3b" : 2 }, "key4" : "value3" } { "key1" : null, "key2" : null, "key3" : { "key3a" : null,

我猜这个标题很琐碎。基本上我想要的是
mysqldump--没有数据…
。例如,我有一个json对象,如下所示:

{ "key1" : "value1",
  "key2" : "value2",
  "key3" : {
      "key3a" : 1,
      "key3b" : 2
  },
  "key4" : "value3"
}
{ "key1" : null,
  "key2" : null,
  "key3" : {
      "key3a" : null,
      "key3b" : null
  },
  "key4" : null
}
我想要的是具有相同结构的空对象,如下所示:

{ "key1" : "value1",
  "key2" : "value2",
  "key3" : {
      "key3a" : 1,
      "key3b" : 2
  },
  "key4" : "value3"
}
{ "key1" : null,
  "key2" : null,
  "key3" : {
      "key3a" : null,
      "key3b" : null
  },
  "key4" : null
}

您想要的类似于通常所说的“深度克隆”,您似乎只想为非对象返回
null
。进行此类克隆的最简单方法是使用递归函数:

function deepAutomnClone(o){
  if (typeof o !== 'object') return null;
  var c = {};
  for (k in o) c[k] = deepAutomnClone(o[k]);
  return c;
}
你可以这样称呼它:

var obj = { "key1" : "value1",
  "key2" : "value2",
  "key3" : {
      "key3a" : 1,
      "key3b" : 2
  },
  "key4" : "value3"
};
console.log(deepAutomnClone(obj));
你的问题不太准确。例如,您可能需要根据所需的数组处理来修改函数


最后一件事:请注意,您拥有的不是“JSON对象”,因为JSON是一种基于文本的交换格式。这是一个普通的JavaScript对象。

这是一个支持在对象中重新设置数组的解决方案。 它还避免了将继承的对象属性设置为null

function cloneAndReset(obj) {

    var res = null;

    if (obj instanceof Array) {
        res = [];
        for (var i = 0; i < obj.length; i++) {
                res[i] = cloneAndReset(obj[i]);
        }
        return res;
    }

    if (obj instanceof Object) {
        res = {};
        for (p in obj) {
            if (obj.hasOwnProperty(p)) {                            
                res[p] = cloneAndReset(obj[p]);
            } 
        }
    } 

    return res;
}
功能克隆集(obj){
var-res=null;
if(阵列的obj实例){
res=[];
对于(变量i=0;i
基本上,你想要一个对象的副本,用null代替字符串和数字,对吗?你必须创建一个包含json所有标记的对象,并用null值填充对象的值,然后序列化这个对象