Ошибка синтаксического анализа JSON в документе разработки CouchDB: незакрытая строка из-за пробелов отступа? - PullRequest
0 голосов
/ 25 сентября 2011

Я использую следующий проектный документ CouchDB для целей тестирования. Я использую возврат каретки \ n и табуляцию \ t для отступа моего кода Javascript. Насколько я понимаю JSON, я думаю, что пробелы в этих местах в порядке. Но Ruby couchrest не справляется с этим и JSLint тоже. Я должен удалить \ n и \ t из проектного документа перед его разбором. Почему это так?

На вводной странице JSON на json.org упоминается, что «пробел может быть вставлен между любой парой токенов».

Здесь немного сложно отобразить вкладки, поэтому я включил проанализированную строку с \ n и \ t.

{
"_id": "_design/test",
"views": {
    "all": {
        "map": "function(doc) {
            if (doc.nom) emit(doc._id, doc);
            }"
        },
    "asin_doc": {
        "map": "function(doc) {
            if (doc.category) emit(doc.asin, doc);
            }"
        },
    "asin": {
        "map": "function(doc) {
            if (doc.category) emit(doc.asin, null);
            }"
        }
    }
    }

Тот же документ в длинной строке (Ruby):

"{\n\t\"_id\": \"_design/test\",\n\t\"views\": {\n\t\t\"all\": {\n\t\t\t\"map\": \"function(doc) {\n\t\t\t\tif (doc.nom) emit(doc._id, doc);\n\t\t\t}\"\n\t\t},\n\t\t\"asin_doc\": {\n\t\t\t\"map\": \"function(doc) {\n\t\t\t\tif (doc.category) emit(doc.asin, doc);\n\t\t\t}\"\n\t\t},\n\t\t\"asin\": {\n\t\t\t\"map\": \"function(doc) {\n\t\t\t\tif (doc.category) emit(doc.asin, null);\n\t\t\t}\"\n\t\t}\n\t}\n}\n"

JSLint сообщает мне, что есть проблема в строке 5 символа 20.

Problem at line 5 character 20: Unclosed string.
"map": "function(doc) {
Problem at line 5 character 20: Stopping. (25% scanned).
JSON: bad.

Я не вижу, где строка неправильно закрыта. Есть идеи?

1 Ответ

1 голос
/ 25 сентября 2011

Новая строка и табуляция не допускаются в строке. См. JSON RFC , в частности:

unescaped = %x20-21 / %x23-5B / %x5D-10FFFF

РЕДАКТИРОВАТЬ: То, о чем json.org говорит, я думаю, это:

Незначительные пробелы разрешены до или после любого из шести структурных символов.

«Структурные символы»: [ ] { } : ,

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