javascript - 如何将json数组对象转换为json数组

标签 javascript jquery json angular6 lodash

** 场景:**

  • 我正在使用 lodash 从 JSON 中删除空 key 。
  • 但是当它删除键时,它会将我的数组转换为对象,例如

    {
    "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 属性,它会做同样的事情,如果你看到 Titles 属性,它也会做同样的事情。

我使用下面的链接代码来删除空对象和空对象:

Why lodash converts my array into object?

输入数据:

    {
"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 === '对象'

对于数组,它将返回true

要检查数组,请使用

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

关于javascript - 如何将json数组对象转换为json数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54359583/

相关文章:

javascript - 根据隐藏元素的 css 值选择并触发点击

javascript - 如何使按钮多次更改段落并在最后一次更改段落和按钮文本?

javascript - 我的 jplayerplaylist 删除功能不起作用

javascript - JQuery Mobile OSM div 自动设置为 0% 高度,即使我的 CSS 已将其设置为 100%

json - 如何在Grails中使用正确的内容类型呈现任意JSON?

javascript - 来自露天 javascript 文件的 HTTP 请求

javascript - 事件源并不代表每个客户端/ session 的信息

jquery - 从 Fullcalendar 中删除天数

json - 创建基于 JSON 的 REST 完整 Web 服务 API 有哪些替代方案?

jquery - CherryPy 如何用 JSON 响应?