Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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 更改嵌套JSON结构中的键名_Javascript_Json - Fatal编程技术网

Javascript 更改嵌套JSON结构中的键名

Javascript 更改嵌套JSON结构中的键名,javascript,json,Javascript,Json,我有一个JSON数据结构,如下所示: { "name": "World", "children": [ { "name": "US", "children": [ { "name": "CA" }, { "name": "NJ" } ] }, { "name": "INDIA", "children": [ { "name"

我有一个JSON数据结构,如下所示:

{
    "name": "World",
    "children": [
      { "name": "US",
          "children": [
           { "name": "CA" },
           { "name": "NJ" }
         ]
      },
      { "name": "INDIA",
          "children": [
          { "name": "OR" },
          { "name": "TN" },
          { "name": "AP" }
         ]
      }
 ]
};

我需要将密钥名称从“name”和“children”更改为“key”和“value”。关于如何为嵌套结构中的每个键名执行此操作,您有什么建议吗?

您可以使用如下函数:

function clonerename(source) {
    if (Object.prototype.toString.call(source) === '[object Array]') {
        var clone = [];
        for (var i=0; i<source.length; i++) {
            clone[i] = goclone(source[i]);
        }
        return clone;
    } else if (typeof(source)=="object") {
        var clone = {};
        for (var prop in source) {
            if (source.hasOwnProperty(prop)) {
                var newPropName = prop;
                if (prop=='name') newPropName='key';
                else if (prop=='children') newPropName='value';
                clone[newPropName] = clonerename(source[prop]);
            }
        }
        return clone;
    } else {
        return source;
    }
}

var B = clonerename(A);
函数clonerename(源代码){
if(Object.prototype.toString.call(source)='[Object Array]'){
var克隆=[];
对于(var i=0;i尝试以下方法:

function convert(data){
  return {
    key: data.name,
    value: data.children.map(convert);
  };
}
或者,如果您需要支持不带地图的旧浏览器:

function convert(data){
  var children = [];
  for (var i = 0, len = data.children.length; i < len; i++){
    children.push(convert(data.children[i]));
  }

  return {
    key: data.name,
    value: children
  };
}
函数转换(数据){
var children=[];
for(变量i=0,len=data.children.length;i
我不知道为什么在JSON标记的末尾有一个分号(假设这就是您在问题中所表示的),但是如果删除了分号,那么您可以在解析数据时使用reviver函数进行修改

var parsed = JSON.parse(myJSONData, function(k, v) {
    if (k === "name") 
        this.key = v;
    else if (k === "children")
        this.value = v;
    else
        return v;
});

演示:

我看到的唯一一个会取消它作为有效JSON标记的资格的东西是分号(我不知道为什么会有分号)除此之外,为什么这不是有效的JSON?因为JSON是一种字符串格式。这可能是一个简单的javascript对象,它以前只缺少一些
var a=
。因此是
。dystroy:是的,JSON是一种文本格式,但这并不意味着服务器上的文件中没有JSON标记,除此之外如图所示,这两种方法都是无效的……但我想我同意,
可以让我朝那个方向倾斜。你想在什么时候/在哪里进行更改?……为什么在结尾有一个分号?你在问题中到底代表了什么?谢谢。你的代码工作得很好。对不起,结尾有分号。这是一个错误输入错误,但我从这个错误中学到了很多。@iAtelazy:我看到了一些新的东西,比如更改键,但我可以知道这个函数在哪里,以便我可以更详细地了解它。如果我想在for循环中向键添加数字,我似乎无法让它像这样工作--this.batchi.concat(string(I))=v;其中,我在for循环中递增。@iAtelazy:请参阅。@iAtelazy这里有什么帮助吗?:)