我沒有控制我打電話的網絡服務。它返回帶有大寫屬性名稱的JSON。這讓我困擾。反序列化JSON對象時有沒有辦法將屬性名轉換爲小寫?
有沒有任何可以解決這個問題的Angular插件?或者有沒有一種簡單而有效的方式來做到這一點在JavaScript?
我沒有控制我打電話的網絡服務。它返回帶有大寫屬性名稱的JSON。這讓我困擾。反序列化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,從而刪除非小寫字母。如果它們相等,它會返回值,所以沒有什麼特別的。
請注意,要與'$ http'集成將需要把它放在'$ httpInterceptor'中 – charlietfl
Javascript對象類有一個名爲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];
}
我無法訪問Web服務,所以我無法修復它。 –
這是一個更好的答案,您的問題,然後在重複中的一個 - http://stackoverflow.com/a/5480605/5157454 –
投票重新打開,因爲另一個問題是關於改變現有對象的屬性的情況下,這一個是關於反序列化JSON。 – Oriol