我在下面有一個嵌套的 JSON 物件。
var payload = {
"name" : {
"first" : "I am a",
"last" : "Customer"
},
"product_info": {
"name" : "Product 1",
"category" : {
"id" : "123456789",
"name" : "C1",
"sub_category" : {
"id" : "321654987",
"name" : "SC1"
},
}
}};
var param = JSON.stringify(payload);
如何取消嵌套 JSON 物件,這樣我就可以擁有如下的 JSON 物件?
var result = {
"name.first" : "I am a",
"name.last" : "Customer",
"product_info.name" : "Product 1",
"product_info.category.id" : "123456789",
"product_info.category.name" : "C1",
"product_info.category.sub_category.id" : "321654987",
"product_info.category.sub_category.name" : "SC1"
}
我試圖用Object.keys(param).length來檢查有多少嵌套物件,但如果沒有嵌套物件,它將回傳值的長度。
任何建議將不勝感激。
uj5u.com熱心網友回復:
嘗試以下代碼在任何嵌套級別展平您的 JSON 物件:
function myFunction(){
var payload = {
"name" : {
"first" : "I am a",
"last" : "Customer"
},
"product_info": {
"name" : "Product 1",
"category" : {
"id" : "123456789",
"name" : "C1",
"sub_category" : {
"id" : "321654987",
"name" : "SC1"
},
}
}};
const flattenJSON = (payload = {}, res = {}, extraKey = '') => {
for(key in payload){
if(typeof payload[key] !== 'object'){
res[extraKey key] = payload[key];
}else{
flattenJSON(payload[key], res, `${extraKey}${key}.`);
};
};
return res;
};
console.log(flattenJSON(payload));
};
基本上它正在重建您的 JSON 物件并將其分配給一個新變數,該變數將物件扁平化到第一級。該程序通過迭代物件來作業,如果它是物件的最后一個引數,它將添加一個帶有值的新鍵。密鑰是它經過的所有密鑰的附加密鑰。
這應該回傳未嵌套的 JSON 物件
參考鏈接:https ://www.tutorialspoint.com/flattening-a-json-object-in-javascript
uj5u.com熱心網友回復:
遍歷物件
function myFunction() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1');
const s = '{"name":{"first":"Iama","last":"Customer"},"product_info":{"name":"Product1","category":{"id":"123456789","name":"C1","sub_category":{"id":"321654987","name":"SC1"}}}}';
const obj = JSON.parse(s);
traverse1(obj, process1);
}
function traverse1(o, func) {
for (var i in o) {
func.apply(this, [i, o[i]]);
if (o[i] !== null && typeof (o[i]) == "object") {
traverse(o[i], func);
}
}
}
function process1(key, value) {
if (typeof (value) == "object") {
Logger.log(key);
} else {
Logger.log("%s: %s ", key, value);
}
}
Execution log
9:08:32 PM Notice Execution started
9:08:32 PM Info name
9:08:32 PM Info first: Iama
9:08:32 PM Info last: Customer
9:08:32 PM Info product_info
9:08:32 PM Info name: Product1
9:08:32 PM Info category
9:08:32 PM Info id: 123456789
9:08:32 PM Info name: C1
9:08:32 PM Info sub_category
9:08:32 PM Info id: 321654987
9:08:32 PM Info name: SC1
9:08:33 PM Notice Execution completed
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/447617.html
