2017-07-17 63 views
1

我的下一個JSON:從JSON中移除兒童並僅與父母生成JSON?

"thing":{ 
    "something":{ 
     "1":1, 
     "2":2 
    } 
    "somethingelse":{ 
     "1":1, 
     "2":2 
    } 
} 

,我想解析JSON這樣:

"thing":{ 
    "something1": 1, 
    "something2": 2, 
    "somethingelse1": 1, 
    "somethingelse2": 2, 
} 

正如你所看到的結果元素的名稱是父的串聯和兒童。價值就是孩子的價值。任何人都可以幫助我,我怎樣才能在JavaScript中得到這個?謝謝。

+1

遞歸函數。 – atomSmasher

回答

1

您可以使用嵌套的循環來實現這一點,如果你有嵌套的屬性只有一個級別:

var thing = { 
 
    "something":{ 
 
     "1":1, 
 
     "2":2 
 
    }, 
 
    "somethingelse":{ 
 
     "1":1, 
 
     "2":2 
 
    } 
 
}; 
 

 
var newThing = {}; 
 

 
for (var key in thing) { 
 
    for (var subKey in thing[key]) { 
 
    newThing[key + subKey] = thing[key][subKey]; 
 
    } 
 
} 
 

 
console.log(newThing);

如果你有水平的任意數量的,遞歸是要走的路!

0

var jn = { 
 
     "test": { 
 
      "test": 1, 
 
      "testx": 2, 
 
      "xtest": { 
 
       "x": 1, 
 
       "y": 2 
 
      }, 
 
      "test2": 1 
 
     }, 
 
     "xx":{ 
 
      "x":2, 
 
      "y": 3 
 
     } 
 
    }; 
 
    
 
    var flatJson = function(json, val, obj){ 
 
     var keys = Object.keys(json); 
 
     
 
     for(var key in json){ 
 
      if(Object.keys(json[key]).length > 0){ 
 
       flatJson(json[key], val + key, obj); 
 
      } 
 
      else { 
 
       obj[val + key] = json[key]; 
 
      } 
 
     } 
 

 
     return obj; 
 
    } 
 
    
 
    /* this is only as an example for your question, you could also call: 
 
     flatJson(jn, "", {}) 
 
    */ 
 

 
    var ret = flatJson(jn["test"], "", {}); 
 
    var out = {"test": ret } 
 
    
 
    document.getElementById("out").innerHTML = JSON.stringify(out, undefined, 2);
<pre id="out" ></pre>

的JN [...]是一些測試數據。該函數將簡單地遍歷鍵,並且只有在沒有鍵時纔會取值並將其添加到變量obj中。否則,它將調用flatJson遞歸,將前一個鍵的參數附加到實際鍵和obj變量上,這些變量將包含該對象。

由於數組對於每個元素沒有明確的名稱,所以它通過js中默認的索引隱式命名。

要用它來解決你的問題 - 讓我們假設你的json被稱爲var js--你可以用var out = flatJson(js["Thing"], "", {});然後var newJs = { "Thing" : out };來調用它,這會導致你的問題輸出。

玩得開心。