簡體   English   中英

如何使用鍵值對將嵌套的JSON數據結構展平為對象

[英]How to flatten a nested JSON data structure into an object with key value pairs

來自源的字符串來自JSON對象中的碎片JSON對象。我想將此JSON結構轉換為平面JSON結構

{
    "nest": {
        "a": {
            "b": {
                "h": {
                    "i": {
                        "all.css": "1",
                        "j": {
                            "k": {
                                "l": {
                                    "lr.png": "2",
                                    "c.png": "3"
                                },
                                ".png": "4"
                            }
                        }
                    }
                }
            }
        }
    }
}

我嘗試這樣做,但是我最多只能得到1個鍵值對,我想要的是{"abhiall.css":"1","abhijkllr.png":"2","abhijklc.png":"3" ……等等。 謝謝

您可以對嵌套對象使用迭代和遞歸方法。

 function flatten(object, target, path) { path = path || ''; Object.keys(object).forEach(function (key) { if (object[key] && typeof object[key] === 'object') { flatten(object[key], target, path + key); return; } target[path + key] = object[key]; }); } var data = { nest: { a: { b: { h: { i: { "all.css": "1", j: { k: { l: { "lr.png": "2", "c.png": "3" }, ".png": "4" } } } } } } } }, flat = {}; flatten(data.nest, flat); console.log(flat); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

您可以使用用戶遞歸函數返回所需的結果。

 var obj = {"nest":{"a":{"b":{"h":{"i":{"all.css":"1","j":{"k":{"l":{"lr.png":"2","c.png":"3"},".png":"4"}}}}}}}} function flat(data, c) { var result = {} for(var i in data) { if(typeof data[i] == 'string') result[c + i] = data[i] if(typeof data[i] == 'object') result = Object.assign(result, flat(data[i], c+= i)) } return result } console.log(flat(obj.nest, '')) 

對於對象數組,我做了以下說明:確保傳入的對象數組至少為n> 0

flatten(objects, target, path) {
let me = this;    
let retArray = [];
for(let x=0; x < objects.length; x++) {

  let object = objects[x];
  path = path || '';
  target={};

  target = me.flattenHelper(object, target, path);

  retArray.push(target);
}
return retArray;}

..

flattenHelper(object, target, path){
let me = this;
Object.keys(object).forEach(function (key) {
  console.log("key : "+ key + " : object : " +  (object[key] && typeof object[key] === 'object') + " path : " + path);
  if (object[key] && typeof object[key] === 'object') {
      me.flattenHelper(object[key], target, path + key);
  }
  target[path + key] = object[key];
  console.log(target);
});
return target;}

使用此功能:

 const flattenObject = (obj, prefix = '') => Object.keys(obj).reduce((acc, k) => { const pre = prefix.length ? prefix : ''; if (typeof obj[k] === 'object') Object.assign(acc, flattenObject(obj[k], pre + k)); else acc[pre + k] = obj[k]; return acc; }, {}); console.log(flattenObject({"nest": {"a": {"b": {"h": {"i":{"all.css":"1","j": {"k": {"l": {"lr.png": "2","c.png": "3"},".png": "4"}}}}}}}})); 
 .as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM