Javascript 大写与小写

Javascript 大写与小写,javascript,html,angularjs,Javascript,Html,Angularjs,我有一个简单的问题 我有多种方法从我无法控制的其他应用程序获取JSON。所有键都有相同的名称,但有些是大写的,有些是小写的 如何读取JSON,使其不受大小写的影响 例如,在我的代码中,当json具有小写形式的customer\u id时,它不起作用 HTML 我会使用属性标准化,即使用lodash,您可以使用: 如果属性可以写为camelCase,则还可以使用以下命令规范化这些属性: 您可以将所有属性规范化为大写或小写: //OP在一些评论中提供了一个示例客户的客户 常数客户=[{ “账户id

我有一个简单的问题

我有多种方法从我无法控制的其他应用程序获取JSON。所有键都有相同的名称,但有些是大写的,有些是小写的

如何读取JSON,使其不受大小写的影响

例如,在我的代码中,当json具有小写形式的
customer\u id
时,它不起作用

HTML


我会使用属性标准化,即使用lodash,您可以使用:

如果属性可以写为camelCase,则还可以使用以下命令规范化这些属性:


您可以将所有属性规范化为大写或小写:

//OP在一些评论中提供了一个示例客户的客户
常数客户=[{
“账户id”:1,
“账户类型描述”:“单一账户”,
“客户id”:1,
“名字”:“彼得”,
“姓”:“帕克”,
“身份证号码”:128,
“税务识别”:35,
“出生日期”:“2018-06-28T07:57:23Z”,
“客户性别描述”:“男性”,
“街道地址”:“高谭街56号”,
“邮政编码”:“21312”,
“城市”:“高谭”,
“国家描述”:“葡萄牙”
},
{
“账户ID”:1,
“账户类型描述”:“单一账户”,
“客户ID”:1,
“名字”:“彼得”,
“姓”:“帕克”,
“身份证号码”:128,
“税务识别”:35,
“出生日期”:“2018-06-28T07:57:23Z”,
“客户性别描述”:“男性”,
“街道地址”:“高谭街56号”,
“邮政编码”:“21312”,
“城市”:“高谭”,
“国家描述”:“葡萄牙”
}
]
const normalizeProperties=entities=>entities.map(客户=>{
const outputCustomer={}
for(让Object.keys的属性(客户))
outputCustomer[property.toLowerCase()]=customer[property]
返回输出客户
})
const normalizedcusters=normalizeProperties(客户)

console.log(JSON.stringify(normalizedcusters))
要忽略JSON中所有键的大小写,可以为如下对象定义自定义getter

Object.defineProperty(Object.prototype, "getProp", {
    value: function (prop) {
        var key,self = this;
        for (key in self) {
            if (key.toLowerCase() == prop.toLowerCase()) {
                return self[key];
            }
        }
    },
    enumerable: false
});
现在您可以忽略如下情况获得属性

obj.getProp("CUSTOMER_ID");
//or
obj.getProp("customer_id");

您可以实现自己的解析函数,并在所有JSON响应上调用它以使其正常化

例如,将所有键标准化为小写的功能

function getParsedObjectWithUpperCaseKeys(jsonObject) {
    var parsedObjectWithUpperCaseKeys = {};

    Object.keys(jsonObject).forEach(function (jsonObjectKey) {
        parsedObjectWithUpperCaseKeys [jsonObjectKey.toUpperCase()] = jsonObject[jsonObjectKey];
    });

    return parsedObjectWithUpperCaseKeys;
}
在控制器代码中:

// Get Customers
promises.customers.$promise.then(function (data) {
    var customers = data["Customers"].Customers;

    $scope.customers = getParsedObjectWithUpperCaseKeys(customers);

    if(!angular.isArray($scope.customers)) {
        $scope.customers = [getParsedObjectWithUpperCaseKeys(customers)];
    } else {
        $scope.customers = [getParsedObjectWithUpperCaseKeys(customers[0])];
    }
    console.log($scope.customers);
}.bind(this));

你能在这里添加
JSON
吗?我真希望你不要在对象不是承诺数组的情况下命名对象
promises
。这会让代码变得混乱<代码>承诺。客户似乎是RESTful$资源实例。我无法使用外部脚本(这是一个企业应用程序)。TypeError:\ mapKeys不是function@user9999443这就是一个例子。您可以自己实现。您的代码不适用于JSON
[{“帐户id”:1,“帐户类型描述”:“单一帐户”,“客户id”:1,“名字”:“彼得”,“姓氏”:“帕克”,“身份证号码”:213124131,“税务识别”:2892031231,“出生日期”:“2018-06-28T07:57:23Z”,“客户性别描述”:“男性”,“街道地址”:“高谭街56号”,“邮政编码”:“21312”,“城市”:“高谭”,“国家描述”:“葡萄牙”}]
我想转换为uppercase@user9999443显然,如果您的绑定是大写的customer.PROPERTY,那么它将不起作用。。。只需将执行
property.toLowerCase()
的代码片段更改为
property.toUpperCase()
。。。
Object.defineProperty(Object.prototype, "getProp", {
    value: function (prop) {
        var key,self = this;
        for (key in self) {
            if (key.toLowerCase() == prop.toLowerCase()) {
                return self[key];
            }
        }
    },
    enumerable: false
});
obj.getProp("CUSTOMER_ID");
//or
obj.getProp("customer_id");
function getParsedObjectWithUpperCaseKeys(jsonObject) {
    var parsedObjectWithUpperCaseKeys = {};

    Object.keys(jsonObject).forEach(function (jsonObjectKey) {
        parsedObjectWithUpperCaseKeys [jsonObjectKey.toUpperCase()] = jsonObject[jsonObjectKey];
    });

    return parsedObjectWithUpperCaseKeys;
}
// Get Customers
promises.customers.$promise.then(function (data) {
    var customers = data["Customers"].Customers;

    $scope.customers = getParsedObjectWithUpperCaseKeys(customers);

    if(!angular.isArray($scope.customers)) {
        $scope.customers = [getParsedObjectWithUpperCaseKeys(customers)];
    } else {
        $scope.customers = [getParsedObjectWithUpperCaseKeys(customers[0])];
    }
    console.log($scope.customers);
}.bind(this));