如何解决CouchDB中奇怪的JSON
| 我正在学习CouchDB,非常喜欢它的功能。不过,有一件事困扰着我,这是CouchDB通过JSON进行通信的说法。 实际上,JSON要求对象的键是字符串,而这是可能的,甚至达米恩·卡茨(Damien Katz)本人也建议其具有返回返回其键是其他对象或数组的对象的视图。 这很令人困惑,因为我没有发现CouchDB使用JSON变体的任何地方。此外,由于至少两个原因,它没有多大意义: 什么时候两个键相等?例如,我假设如果CouchDB允许不是字符串的键,则将允许数字。但是然后键5
和\'5\'
将有所不同,这很奇怪,因为在Javascript中它们被认为是相同的。
更重要的是,由于无法使用每种语言都可用的标准JSON解析器,因此解析CouchDB的输出将更加困难。
我只是在解释以上链接时感到困惑,还是实际上CouchDB返回了非标准JSON输出?如果是这样,一个人如何使用它?
解决方法
不要在对象的键和沙发视图的键之间混淆。
CouchDB视图结果中的每一行都包含id,键和值。
id
是字符串,key
和value
可以是任何对象。将非字符串值用作键是很常见的。
这是带有非字符串键的示例视图结果。
$ curl http://127.0.0.1:5984/blog/_design/posts/_view/by_date
{\“ total_rows \”:3,\“ offset \”:0:\“ rows \”:[
{\“ id \”:\“ 88e325c07e897f52766340dc17003322 \”,\“ key \”:[2010,10,13],\“ value \”:null},
{\“ id \”:\“ 88e325c07e897f52766340dc17002641 \”,\“ key \”:[2011,4,5],\“ value \”:null},
{\“ id \”:\“ 88e325c07e897f52766340dc1700233e \”,\“ key \”:[2011,23],\“ value \”:null}
]}
,文档ID(“ 5”)字段必须为字符串。视图键(to6的第一个参数)可以是任何JSON值。没错,这有点令人困惑。
根据CouchDB归类规范,两个键被视为相等。基本上,值会像您期望的那样进行比较:
数字按值排序
字符串根据libicu规则排序。
数组通过比较第一个值,第二个值等进行排序。
当然,对于文档ID,唯一重要的是字符串的排序方式,因为文档ID始终是字符串。
最后,CouchDB始终输出标准JSON。如果您遇到来自CouchDB的非标准JSON,这是一个错误,并且社区希望了解它。
,我想这可以解释它。
再想一想,键是map / reduce操作的一部分,因此我必须对此进行深入研究。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。