2015-10-01 23 views
1

我沒有控制我打電話的網絡服務。它返回帶有大寫屬性名稱的JSON。這讓我困擾。反序列化JSON對象時有沒有辦法將屬性名轉換爲小寫?

有沒有任何可以解決這個問題的Angular插件?或者有沒有一種簡單而有效的方式來做到這一點在JavaScript?

+0

我無法訪問Web服務,所以我無法修復它。 –

+1

這是一個更好的答案,您的問題,然後在重複中的一個 - http://stackoverflow.com/a/5480605/5157454 –

+0

投票重新打開,因爲另一個問題是關於改變現有對象的屬性的情況下,這一個是關於反序列化JSON。 – Oriol

回答

2

可以使用傳遞函數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,從而刪除非小寫字母。如果它們相等,它會返回值,所以沒有什麼特別的。

+0

請注意,要與'$ http'集成將需要把它放在'$ httpInterceptor'中 – charlietfl

0

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]; 
} 
相關問題