4. 对象 (Objects)
对象结构表示为一对花括号, 其中包含零个或多个 name/value pairs (或 members). name 是一个字符串. 每个 name 后跟一个冒号, 用于将 name 与 value 分隔开. 一个逗号用于将 value 与后续 name 分隔开. 对象中的 name SHOULD 是唯一的.
object = begin-object [ member *( value-separator member ) ]
end-object
member = string name-separator value
如果对象中的 name 全部唯一, 则它是可互操作的, 其含义是接收该对象的所有软件实现都会就 name-value mappings 达成一致. 当对象中的 name 不唯一时, 接收这类对象的软件行为是不可预测的. 许多实现只报告最后一个 name/value pair. 其他实现会报告错误或无法解析该对象, 还有一些实现会报告所有 name/value pairs, 包括重复项.
已有观察表明, JSON parsing libraries 在是否向调用软件暴露 object members 的顺序方面存在差异. 如果实现的行为不依赖 member ordering, 则它们是可互操作的, 因为它们不会受到这些差异影响.