将JSON字符串输出的部分转换为布尔值

问题描述:

是否有任何方法将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

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

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