CouchDB中的奇怪JSON

And*_*rea 3 json couchdb

我正在学习CouchDB I并非常喜欢它的功能.但有一件事让我感到困惑,而CouchDB通过JSON进行通信的主张就是这样.

实际上,JSON要求对象的键是字符串,而有可能,甚至Damien Katz自己建议使用返回其键是其他对象或数组的对象的视图.

这很令人困惑,因为我没有发现CouchDB使用JSON变体的任何地方.此外,它没有多大意义,至少有两个原因:

  1. 两个键何时被认为相等?例如,我假设如果CouchDB允许不是字符串的键,则允许使用数字.但是然后键5'5'将是不同的,这是奇怪的,因为在Javascript中它们被认为是相同的.

  2. 更重要的是,解析CouchDB的输出将更加困难,因为不能使用可用于每种语言的标准JSON解析器.

我只是在解释上面的链接时感到困惑,或者实际上CouchDB是否返回了非标准的JSON输出?如果是这样,一个人如何使用它?

Jas*_*ith 5

文档ID(_id)字段必须是字符串.视图键(第一个参数emit())可以是任何JSON值.你是对的,这有点令人困惑.

根据CouchDB归类规范,两个密钥被认为是相等的.基本上,值与您期望的相比:

  • 数字按值排序
  • 字符串根据libicu规则排序.
  • 数组通过比较第一个值,第二个值等进行排序.

当然,对于文档ID,唯一重要的是字符串排序,因为文档ID总是字符串.

最后,CouchDB总是输出标准JSON.如果您遇到来自CouchDB的非标准JSON,这是一个错误,社区希望听到它.