JSON 值 1 或 0 - int 或 boolean
Posted
技术标签:
【中文标题】JSON 值 1 或 0 - int 或 boolean【英文标题】:JSON values 1 or 0 - int or boolean 【发布时间】:2011-09-26 09:18:20 【问题描述】:JSON 是否对这些都一视同仁?还是它们是整数和布尔值的混合?
var data =
"zero" : 0,
"one" : 1,
"false" : 0,
"true" : 1,
"0" : false,
"1" : true
【问题讨论】:
你的意思是价值观?嗯,有 Number 类型,也有 Boolean 类型。因此,这些值并不相同。 顺便说一句,true
和 false
是保留字,因此您将无法使用点表示法来检索属性值。例如,data.zero
返回0
,但data.false
会引发解析错误(在某些浏览器中)(data['false']
可以工作(= 返回0
))。
【参考方案1】:
值true
和false
是实际的布尔值,其余的是整数。请参阅http://json.org/ 了解更多信息。
【讨论】:
json.org 的链接在这里很有用。我来这个问题是想看看 JSON 是否在值 true 和 false 周围使用引号。 为了帮助找到这篇文章的人寻找相同的信息,答案是“否”。 JSON 中的值true
和 false
周围没有引号。【参考方案2】:
JSON 是一种传输数据的格式。 它没有平等的概念。
JSON 解析器将布尔值和数字视为不同的类型。
【讨论】:
这个答案本来可以更清楚地解释的,这样说:"Phil,你提到JSON,这是一种格式;你要问的是JSON解析器。实际上,JSON解析器......等等等等。” 作为***解释者的人们总是放弃幽默、温和的讽刺、诙谐的倒置直接、令人惊讶的开场白,以及任何形式的风格策略,无论如何......为了绝对的、全面的、解释性的力量。 S.,我指导像你这样的年轻人阅读温斯顿丘吉尔的著作——你会喜欢我的早年生活,这是掌握语言的典范。干杯 多么无意义的答案——甚至是错误的,因为实际上有一个官方的JSON specification 表明true
和false
文字值不同于数字。任何未能做出这种区分的解析器都不是 JSON 解析器。
如果有人不喜欢 OP 和答案提供者之间的交流是相互接受的这一事实......如绿色复选标记所证明的那样,请以身作则,而不是咆哮。跨度>
不回答问题
@Eric:那是因为这个问题没有答案/没有意义。【参考方案3】:
我更喜欢使用 0/1 而不是 true/false,因为 0/1 只消耗 1 个字节,而 true/false 消耗 4/5 个字节。
【讨论】:
您可能更喜欢它,但使用 0/1 并不总是有效。以 JWT 为例。 无法给你一个确切的数字,但既然你应该将你的 JSON 压缩到客户端,那么我认为你使用 0/1 保存的未压缩字节不值得遵循标准。 GZip/Brotli 压缩可能会用 'true' 和 'false' 代替表中更短的查找值。数据中出现“真”或“假”的次数越多,节省的就越多。真的不值得担心。编写代码/生成符合标准的 JSON。当你走了别人会感激它。否则他们会恨你的。【参考方案4】:如前所述,在 JSON 级别,0 和 false 是不一样的;数据类型是数字与布尔值。 但是 JSON 处理库可以选择做转换;例如,尤其是在没有本机布尔类型的语言/平台上。在这种情况下,可以使用另一种表示形式(空字符串或 0 表示 false)。
此外,处理库也可以强制类型:这样,如果需要布尔值,则可以接受某些数字/字符串值(或 JSON 'null' 标记)。 这是相当普遍的,因为不同语言的数据类型选择不同。
【讨论】:
以上是关于JSON 值 1 或 0 - int 或 boolean的主要内容,如果未能解决你的问题,请参考以下文章
当类型转换为 int 时,C/C++ bool 类型是不是总是保证为 0 或 1?
Flutter 中如何识别最终或动态值属性是 bool 还是 int
警告 C4800:“int”:强制值为 bool“true”或“false”(性能警告)