簡體   English   中英

從鍵包含 '.' 的對象創建 json

[英]Create json from object where keys contain '.'

我該如何轉換

 {'Address.street': 's street',
  'Address.streetNum': 's street num',
  'Address.npa': 'npa',
  'Address.city': 's city',
  'Address.country': 's country'}

{
Address:{
street: 's street',
streetNum: 's street num'
npa: 'npa'
city:  's city',
country: 's country'
}
}

我使用 nodejs (v10.12.0) 作為后端。

我已經嘗試使用lodash pick ,但沒有按預期工作。

任何的想法 ?

為此創建空白數組然后分配空白對象然后將對象推入數組

let address=[]
let object=Object.assign({});
object.street='s street';
object.streetNum='s street num'
 ....

address.push(object)

you can console.log(address) 
you will achieve the result

對於更通用的解決方案,這是我很快寫下的內容:

var unflatten = function unflatten(obj) {
    var ret = {};

    //for each flattened key in our original object
    for(var key in obj) {
        if(obj.hasOwnProperty(key)) {
            //split each key into parts separated by '.'
            var parts = key.split('.');

            //keep the last part separate, we'll need it assign our value
            var lastPart = parts.pop();

            //keep a reference to the current child object
            var parent = ret;

            //for each part in our key
            for(var i = 0; i < parts.length; i++) {
                var part = parts[i];

                //only create a new object if it doesn't exist
                if(!parent[part])
                    parent[part] = {};

                //reassign our parent to go one level deeper
                parent = parent[part];
            }

            //finally, assign our original value
            //note that this will overwrite whatever's already there
            parent[lastPart] = obj[key];
        }
    }

    return ret;
};

//usage:
var obj = {
    'foo.bar.baz': 1,
    'foo.qux': 2
};

unflatten(obj);

//returns { foo: { bar: { baz: 1 }, qux: 2 } }

另請參閱@str 對其他解決方案/討論的評論

暫無
暫無

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

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