簡體   English   中英

如何將json數組對象轉換為json數組

[英]How to convert json array object to json array

**場景:**

  • 我正在使用lodash從我的JSON中刪除空鍵。
  • 但是,當它刪除鍵時,它會將我的數組轉換為一個對象

     { "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屬性,則屬性相同。

我已經使用下面的鏈接代碼刪除空對象和空對象:

為什么lodash將我的數組轉換為對象?

輸入數據:

    {
"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... }) } 

腳步

  1. 遍歷heatRules屬性(因為它是數組,所以其中可能有多個對象)
  2. 遍歷heatRules中每個對象的屬性
  3. 刪除每個值為null的屬性

 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.

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