2012-11-22 221 views
5

我有一個JSON數據結構更改鍵名,如下圖所示:嵌套JSON結構

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

我需要從「名」 &「孩子」更改密鑰名稱註明「鑰匙」 &「值」。任何關於如何爲這個嵌套結構中的每個鍵名稱做的建議?

+0

時/你在哪裏要做出改變? –

+0

...以及爲什麼最後有分號?你在問題中究竟代表什麼? –

回答

11

我不知道爲什麼你在你的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; 
}); 

DEMO:http://jsfiddle.net/BeSad/

+1

謝謝。你的代碼工作完美。對不起,最後分號。這是一個錯字,但我從這個錯誤中學到了很多東西。 – user1842231

+0

@ user1842231:不客氣。 –

+0

@IHateLazy:我看到了一些新的東西,比如改變鍵值,但是我可以知道這個函數在哪裏,這樣我可以更詳細地瞭解它。如果我想爲for循環中的鍵添加數字,我似乎不能像 - this.batchi.concat(string(i))= v;我在for循環中遞增。 – user1739825

0

你可以使用這樣的功能:

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); 

請注意,您所得到的並不是一個JSON數據結構(這個不存在作爲JSON is a data-exchange format),但可能是你從一個JSON字符串得到了一個對象。

+0

我唯一看到的將它取消爲有效JSON標記的資格是分號*(我不知道爲什麼在那裏)*。除此之外,爲什麼這不是有效的JSON? –

+0

因爲JSON是*字符串*格式。這可能是一個簡單的JavaScript對象,它只是在之前缺少一些'var a ='。因此';'。 –

+0

錯誤:是的,JSON是一種文本格式,但這並不意味着這不是一些位於服務器上的文件中的JSON標記,除了該分號之外。如圖所示,這兩種方式都無效。 –

0

試試這個:

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 
    }; 
}