带有空数值的JSON? (不是0)

时间:2013-07-12 00:42:09

标签: javascript json

给出一个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": "",但这意味着它是一个字符串(开头为空),而我想要得分是数字(开始时为空)。所以我推入的数字保持一个数字,而不是一个字符串。

如何声明空/未定义的数字?


注意:我直觉地认为这就是为什么我有时会见undefined


编辑:编辑问题以澄清上下文,需要检查obj.score的存在,其中0会产生误导。

3 个答案:

答案 0 :(得分:4)

TL; DR :如果每个人都以零分开始,请使用0(零)。如果您特别想要说某人的分数尚未设定,请使用null。不要定义属性,如果它不应该放在特定的情况下(比如甚至不应该具有"score"属性的对象)。

省略JSON对象中的值

好吧,在JSON中,您不能只省略该值。它必须设置为数字(整数或浮点数),对象,列表,布尔值,空值或字符串。要阅读有关语法的更多信息,请尝试使用以下资源:http://json.org/。这是从该站点获取的图表,显示了JSON中对象表示的语法:

enter image description here

最受欢迎的方法:null0(零),未定义

通常的方法是设置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的价值,但它相当不一致。同样,当涉及到空字符串("")时。但是,在反序列化期间,大多数编程语言都应该适当支持这两种情况。

答案 1 :(得分:1)

为什么不在0开始得分?几乎任何涉及得分的人都会以0分开始。

[
  { "id":"A", "status": 1, "rank":1, "score": 0 },
  { "id":"B", "status": 1, "rank":1, "score": 0 }
]

答案 2 :(得分:1)

根据定义,数值是值类型,不能是null。只应将引用类型(如字符串,数组等)初始化为null

对于您的情境的语义,我建议您使用布尔值来了解是否有要读取的分数。

[
    { "id":"A", "status": 1, "rank":1, "empty":true  },
    { "id":"B", "status": 1, "rank":1, "empty":false, "score":100}
]

然后,

if (!foo.empty) {
    var score = foo.score;
}

虽然也可以测试null,但它是一个数字的错误表示。