在反序列化JSON对象时,是否有方法将属性名称转换为小写?

Is there a way to convert property names to lower case when deserializing a JSON object?

本文关键字:转换 属性 对象 JSON 反序列化 有方法 是否      更新时间:2023-09-26

我无法控制我正在调用的web服务。它返回带有大写属性名的JSON。这让我很困扰。

有没有Angular插件可以解决这个问题?或者在javascript中有一种简单有效的方法来做到这一点?

您可以使用传递reviver函数作为JSON.parse的参数:

JSON.parse('{"Test": {"Foo": 1, "Bar": 2} }', function(prop, value) {
  var lower = prop.toLowerCase();
  if(prop === lower) return value;
  else this[lower] = value;
});

基本上,它将每个属性转换为小写,并检查它们是否不同。如果不相同,则设置小写属性并返回undefined,从而删除非小写属性。如果它们相等,则返回值,因此没有做任何特殊操作。

Javascript Object类有一个名为keys()的方法。您可以使用它来遍历对象属性名,并在将JSON字符串转换为javascript对象后使用toLowerCase()对其进行编辑。

var obj = {"Test": "foo"};
var ar = Object.keys(obj);
for(var i = 0; i < ar.length; i++){
    var upperCasePropertyName = ar[i];
    ar[i] = ar[i].toLowerCase();
    obj[ar[i]] = obj[upperCasePropertyName];
    delete obj[upperCasePropertyName];
}