[英]How to convert json array object to json array
**場景:**
但是,當它刪除鍵時,它會將我的數組轉換為一個對象
{ "projection": "Miller", "series": [ { "mapPolygons": { "states": { "hover": { "properties": { "fill": "#67b7dc" } } } }, "heatRules": { "0": { "min": "#a82626", "max": "#AAAA00" } }, "data": { "0": { "id": "US", "value": 3461.37 }, "1": { "id": "DE", "value": 2858.09 }, "2": { "id": "NO", "value": 3418.87 }, "3": { "id": "ES", "value": 3522.46 } } } ], "zoomControl": { "slider": { "height": 100 } }, "titles": { "0": { "fontSize": 20 } }, "homeZoomLevel": 1 }
問題:
如果您在上面的代碼中看到了heatRules屬性,該屬性是轉換后的數組,將其轉換為對象0,如果看到data屬性,則屬性相同,如果看到title屬性,則屬性相同。
我已經使用下面的鏈接代碼刪除空對象和空對象:
輸入數據:
{
"projection": "Miller",
"series": [
{
"mapPolygons": {
"states": {
"hover": {
"properties": {
"fill": "#67b7dc",
"size": ""
}
}
}
},
"heatRules": [
{
"min": "#a82626",
"max": "#AAAA00",
"fill": null
}
],
"data": [
{
"id": "US",
"value": 3461.37
},
{
"id": "DE",
"value": 2858.09
},
{
"id": "NO",
"value": 3418.87
},
{
"id": "ES",
"value": 3522.46
}
]
}
],
"zoomControl": {
"slider": {
"height": 100
}
},
"titles": [
{
"fontSize": 20,
"fontColor": ""
}
],
"homeZoomLevel": 1
}
輸出數據:
{
"projection": "Miller",
"series": [
{
"mapPolygons": {
"states": {
"hover": {
"properties": {
"fill": "#67b7dc"
}
}
}
},
"heatRules": [
{
"min": "#a82626",
"max": "#AAAA00"
}
],
"data": [
{
"id": "US",
"value": 3461.37
},
{
"id": "DE",
"value": 2858.09
},
{
"id": "NO",
"value": 3418.87
},
{
"id": "ES",
"value": 3522.46
}
]
}
],
"zoomControl": {
"slider": {
"height": 100
}
},
"titles": [
{
"fontSize": 20
}
],
"homeZoomLevel": 1
}
如果在上面的輸出中看到,它將從屬性->大小,heatRulues->填充中刪除null和空白鍵,並從標題中刪除fontColor。
如果您的代碼使用
typeof v === 'object'
對於arrays
,它將返回true
。
要檢查array
,請使用
Array.isArray(t)
將array
視為object
並遍歷鍵會導致問題。
function removeFalsies(obj) { return _.transform(obj, function(o, v, k, l) { if (Array.isArray(obj) { for (let arrItem of obj) { removeFalsies(arrItem); } return } // else not array... }) }
腳步
let data = { "projection": "Miller", "series": [{ "mapPolygons": { "states": { "hover": { "properties": { "fill": "#67b7dc", "size": "" } } } }, "heatRules": [{ "min": "#a82626", "max": "#AAAA00", "fill": null }], "data": [{ "id": "US", "value": 3461.37 }, { "id": "DE", "value": 2858.09 }, { "id": "NO", "value": 3418.87 }, { "id": "ES", "value": 3522.46 } ] }], "zoomControl": { "slider": { "height": 100 } }, "titles": [{ "fontSize": 20, "fontColor": "" }], "homeZoomLevel": 1 } data.series[0].heatRules.forEach(hr => { Object.keys(hr).forEach(p => { if (hr[p] === null) { delete hr[p] } }) }) console.log(data)
我嘗試過為什么lodash將我的數組轉換為對象? 例如及其工作。 檢查下面的代碼。
let a = {
"projection": "Miller",
"series": [
{
"mapPolygons": {
"states": {
"hover": {
"properties": {
"fill": "#67b7dc",
"size": ""
}
}
}
},
"heatRules": [
{
"min": "#a82626",
"max": "#AAAA00",
"fill": null
}
],
"data": [
{
"id": "US",
"value": 3461.37
},
{
"id": "DE",
"value": 2858.09
},
{
"id": "NO",
"value": 3418.87
},
{
"id": "ES",
"value": 3522.46
}
]
}
],
"zoomControl": {
"slider": {
"height": 100
}
},
"titles": [
{
"fontSize": 20,
"fontColor": ""
}
],
"homeZoomLevel": 1
}
removeFalses = (obj)=> {
return _.transform(obj, function (o, v, k) {
if (v && typeof v === 'object' && !_.isArray(v)) {
if (v !== '') {
o[k] = removeFalses(v);
}
} else if(_.isArray(v)) {
if(!o.hasOwnProperty(k)) o[k] = [];
//And if it is array loop through it
_.forEach(v, function(v1, k1) {
o[k].push(removeFalses(v1));
});
}else if (v === false) {
o[k] = v;
} else if (v) {
o[k] = v;
}
});
}
console.log(removeFalses(a)) //desired output
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.