给定一个 JSON:
[
{ "id":"A", "status": 1, "rank":1, "score": },
{ "id":"B", "status": 1, "rank":1, "score": }
]
由于分数为空,我的脚本失败。
给定一个 JS:
if (json[i].score) { do something } else { calculate it }
我想保持字段空,而不是使用 0。我可以使用 "score": ""
,但这意味着它是一个字符串(空在开始时),而我希望分数是数字(开始时为空)。所以我压入其中的数字仍然是一个数字,而不是一个字符串。
如何陈述空/未定义的数字?
<小时/>注意:我直觉地认为这就是为什么我有时会遇到未定义
。
编辑:编辑问题是为了澄清上下文,需要检查 obj.score 是否存在,其中 0 会产生误导。
最佳答案
TL;DR:如果每个人都以零分开始,则使用 0
(零)。如果您特别想说某人的分数尚未设置,请使用 null
。如果不应将属性放置在特定情况下(例如甚至不应该具有“score”属性的对象),请不要定义该属性。
省略 JSON 对象中的值
嗯,在 JSON 中你不能只省略该值。它必须设置为数字(整数或 float )、对象、列表、 bool 值、null 或字符串之类的值。要了解有关语法的更多信息,请尝试此资源:http://json.org/ 。这是从该站点获取的图表,向您展示了 JSON 中对象表示的语法:
最流行的方法:null
、0
(零)、未定义
通常的方法是设置null
。在其他情况下,如果适用,最好使用 0
(零)(例如,该字段表示“sum”)。
另一种方法是不设置该属性。反序列化后,您就可以执行测试来检查特定属性是否存在,如下所示:
JavaScript:
if (typeof my_object.score !== 'undefined'){ // "score" key exists in the object }
Python:
if 'score' in my_object: pass # "score" key exists in the object
PHP:
if (array_key_exists('score', $my_object)) { // "score" key exists in the object }
不太一致的方法:false
、""
在这种情况下,有些人也接受值为false
,但这是相当不一致的。对于空字符串(""
)也是如此。但是,在反序列化过程中,大多数编程语言都应该正确支持这两种情况。
关于javascript - JSON 带有空数值? (非0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17605839/