Странный JSON в CouchDB - PullRequest
       3

Странный JSON в CouchDB

3 голосов
/ 25 мая 2011

Я изучаю CouchDB и мне очень нравится его функциональность. Однако меня беспокоит одна вещь - это утверждение, что CouchDB связывается через JSON.

На самом деле, JSON требует, чтобы ключи для объектов были строками, в то время как возможно и даже по совету самого Дэмиена Каца иметь представления, которые возвращают объекты, ключи которых являются другими объектами или массивы.

Это сбивает с толку, поскольку я нигде не нашел написанного, что CouchDB использует вариант JSON. Более того, в этом нет особого смысла, по крайней мере, по двум причинам:

  1. когда два ключа считаются равными? Например, я предполагаю, что если CouchDB разрешает ключи, которые не являются строками, числа будут разрешены. Но тогда ключи 5 и '5' будут разными, что странно, поскольку в Javascript они считаются одинаковыми.

  2. Что еще более важно, анализ выходных данных CouchDB будет более сложным, поскольку нельзя использовать стандартные парсеры JSON, доступные для каждого языка.

Я просто запутался в интерпретации вышеуказанных ссылок, или на самом деле CouchDB возвращает нестандартный вывод JSON? И если да, то как с этим работать?

Ответы [ 3 ]

5 голосов
/ 26 мая 2011

Идентификаторы документов (_id) поле должно быть строкой. Просмотр ключей (первый параметр emit()) может быть любым значением JSON.Вы правы, это немного сбивает с толку.

Два ключа считаются равными согласно спецификации сопоставления CouchDB .По сути, значения сравниваются так, как вы ожидаете:

  • Сортировка чисел по значению
  • Сортировка строк по правилам libicu.
  • Сортировка массивов путем сравнения первого значения, второгозначение и т. д.

Конечно, при идентификаторах документов важно только то, как строки сортируются, поскольку идентификаторы документов всегда являются строками.

Наконец,CouchDB всегда выводит стандартный JSON.Если вы столкнулись с нестандартным JSON из CouchDB, это ошибка, и сообщество хотело бы услышать об этом.

3 голосов
/ 27 мая 2011

Не путайтесь между клавишами объекта и клавишами представления couchdb.

Каждая строка в результате просмотра CouchDB содержит идентификатор, ключ и значение. 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,4,23],"value":null}
]}
1 голос
/ 25 мая 2011

Полагаю, это объясняет это.

enter image description here

Если подумать, ключи - это части операций map / Reduce, так что мне нужно разобраться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...