2014-10-09 256 views
0

是否有任何方法將JSON字符串的某些部分轉換爲布爾值?將JSON字符串輸出的部分轉換爲布爾值

我的JSON字符串例如:

{ 
    "file_id": { 
     "width": "560", 
     "height": "270", 
     "esc_button": "1", 
     "overlay_close": "1", 
     "overlay_opacity": "1" 
    } 
} 

如果這是我的個人項目,我相信我只想轉換布爾輸出到true/false字符串,而不是1 and 0,但因爲它不是我不知道如果有一種方法可以設置JSON字符串的屬性是布爾值。在這個例子中,布爾應該是:esc_button, overlay_close但不是overlay_opacity ...

所以既然這是JavaScript項目,我想知道我的選擇是什麼,有沒有簡單的方法來做到這一點?這個JSON字符串有更多的設置,我剛剛發佈了它的一部分。設置的變化取決於click事件(different file_id === different settings)

編輯:

只是想出我可以用parseInt(settings[file_id].esc_button)獲得布爾,但我真的必須使用所有的時間?可能還有其他方法,我不知道。

+3

@mccannf可能的[標籤:java]的問題? – 2014-10-09 20:19:14

+0

據我所知,不是重複的: -/ – dvLden 2014-10-09 20:28:15

回答

1

JSON只是一種數據格式。如果您正在使用的數據選擇通過字符串"0",您將得到字符串"0",而不是false

如果"0"不是你想要在你的程序中,你需要處理一些數據。

// for example 
var processData = function(jsonString) { 
    var data = JSON.parse(jsonString); 
    data.esc_button = (data.esc_button == "1"); 
    return data; 
}; 

JSON.parse()本身不提供這樣做的方法。它只是解碼數據,因爲它在源代碼中。如果你需要不同的東西,你需要翻譯。


理想情況下,您應該讓您的數據源以更好的格式爲您提供此數據。如果它具有真正的布爾文字值,則根本不需要做任何翻譯。

{ 
    "file_id": { 
     "width": 560, 
     "height": 270, 
     "esc_button": true, 
     "overlay_close": false, 
     "overlay_opacity": 1 
    } 
} 

如果您的JSON看起來像那樣,那麼您只需解析它並完成即可。通過從寬度和高度中刪除引號,現在這些數字值不需要翻譯即可在其他數學中使用。通過爲布爾值報告truefalse,那些將被解析爲布爾文字,而不是字符串。這一切正常。

這也解決了歧義。在你的原始JSON中,你的"1"的值爲true"1"的值爲opacity,我假設這個值是一個從零到一的數字。現在您可以查看原始JSON數據並查看其差異。

+0

我想我應該更好地堅持'parseInt()'爲了我的項目。儘量保持腳本儘可能最小化。 +1讓我知道沒有其他方法! – dvLden 2014-10-09 20:30:24

+0

理想情況下,您的數據源應該使用真正的'true' /'false'布爾值而不是字符串中的數字來提供更好的數據。你有什麼機會改變呢?你的生活會更容易:) – 2014-10-09 21:02:22

+0

如果傢伙改變輸出爲「真/假」我怎麼能仍然得到它作爲布爾而不是'if(option ===「true」)' – dvLden 2014-10-09 21:08:08

1

JS是一種動態語言。你可以自己做。

if (my_object[its_property]==="1") 
    my_object[its_property] = true 
else 
    my_object[its_property] = false; 

或更簡潔my_object=(my_object[its_property]==="1");

+0

那麼這將會爲很多設置做很多陳述... – dvLden 2014-10-09 20:29:30

+0

重複是電腦擅長的。這可能是要翻譯爲布爾值的屬性數組的循環體。 :) – PSkocik 2014-10-09 20:32:17