JSON对象属性名称可以是整数吗?

时间:2011-10-18 18:19:38

标签: java json jackson

我刚刚开始使用一些Jackson JSON数据。这部分给了我麻烦。

"pointData":{
    "1":"32.1093904, 66.7065216", 
    "2":"33.1236854, 67.8128443", 
    "3":"32.9524550, 67.0013501"
}

在我看来,将整数作为属性名称是非法的。这是对的吗?

2 个答案:

答案 0 :(得分:6)

JORD不能具有整数属性名称是正确的,因为必须引用所有JSON属性名称,因为它们是上面的,使它们成为字符串。请参阅此处的流程:http://json.org/

此外,上面的JSON结构是无效,因为它以属性名称开头,但没有该属性属于的对象。如果您遇到错误,这就是原因。法律结构将是:

{"pointData":{
    "1":"32.1093904, 66.7065216", 
    "2":"33.1236854, 67.8128443", 
    "3":"32.9524550, 67.0013501"
    }
}

仅供参考,如果您要存储点数据,可能会有更好的结构:

{"pointData":{
    "1": {"x": 32.1093904, "y": 66.7065216}, 
    "2": {"x": 33.1236854, "y": 67.8128443}, 
    "3": {"x": 32.9524550, "y": 67.0013501}
    }
}

请注意有关此结构的两件事:

  1. 每个点都有xy属性,可以独立访问。
  2. xy属性的值是数字,而不是字符串。

答案 1 :(得分:2)

那些不是整数,那些是字符串。它们碰巧是包含字符的字符串,也用于表示其他上下文中的整数,但它们仍然是字符串,所以这是有效的JSON。来自JSON spec

  

字符串是零个或多个Unicode字符的序列,用双引号括起来,使用反斜杠转义。

这样的东西不是有效的JSON:

{ 1:"32.1093904, 66.7065216", 
  2:"33.1236854, 67.8128443", 
}

...因为这里的字符没有用双引号括起来,所以JSON中没有有效的键。