Я использую следующий проектный документ 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.
Я не вижу, где строка неправильно закрыта. Есть идеи?