使用CouchDB设计文档的JSON解析错误:由于缩进空格而导致的未闭合字符串?

时间:2011-09-25 13:01:33

标签: json parsing couchdb

我使用以下CouchDB设计文档进行测试。我使用回车\ n和制表符\ t来缩进我的Javascript代码。据我所知,JSON,我认为那些地方的空白是可以的。但Ruby couchrest也无法解析它和JSLint。在解析之前,我必须从设计文档中删除\ n和\ t.那是为什么?

json.org上的JSON介绍页面提到“可以在任何一对令牌之间插入空格。”

在这里渲染标签有点困难所以我已经包含了一个带有\ 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 个答案:

答案 0 :(得分:1)

字符串中不允许使用换行符和制表符。请参阅JSON RFC,具体来说:

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

编辑:我认为json.org正在谈论的是:

  

在六个结构字符中的任何一个之前或之后允许无关紧要的空格。

“结构字符”是:[ ] { } : ,