0

这是 json 。

"{
    'places': [
        {
            'name': 'New\x20Orleans,
            \x20US\x20\x28New\x20Lakefront\x20\x2D\x20NEW\x29',
            'code': 'NEW'
        }

    ]
}"

我收到 json 解析器错误。我正在检查http://jsonlint.com/并显示以下错误

Parse error on line 1:
"{    'places': [ 
^
Expecting '{', '['

请解释json有什么问题,我要纠正它吗?

4

2 回答 2

5

如果您的字面意思是整个字符串是您的 JSON 文本(包含不是 JSON 的内容),那么存在三个问题:

  1. 它只是一个 JSON片段,而不是完整的 JSON 文档。

  2. 字符串中的文字换行符在 JSON 中无效,请使用\n.

  3. \x是 JSON 字符串中的无效转义序列。如果您希望包含的非 JSON 文本有\x转义(例如,当您读取整个字符串的值并对其进行解析时),您必须转义该反斜杠:\\x.

在完整的 JSON 文档中,顶层必须是对象或数组:

{"prop": "value"}

[1, 2, 3]

大多数 JSON 解析器都支持解析片段,例如独立字符串。(例如,JavaScriptJSON.parse支持这一点。)然而, http://jsonlint.com正在进行完整的文档解析。

这是您的片段包装在一个对象中,并处理了换行符和\x问题:

{
    "stuff": "{\n 'places': [\n {\n 'name': 'New\\x20Orleans,\n \\x20US\\x20\\x28New\\x20Lakefront\\x20\\x2D\\x20NEW\\x29',\n 'code': 'NEW'\n }\n \n ]\n }"
}

字符串中的文本也不是有效的 JSON,但可能并非如此。为了完整起见:JSON 要求所有键和字符串都用引号 ( "),而不是单引号 ( ')。它也不允许字符串文字中的文字换行符(\n改为使用),并且不支持\x转义。有关详细信息,请参阅http://json.org

这是一个作为有效 JSON 的版本,并\x转换为正确的 JSON\u转义:

{
    "places": [
        {
            "name": "New\u0020Orleans,\n\u0020US\u0020\u0028New\u0020Lakefront\u0020\u002D\u0020NEW\u0029",
            "code": "NEW"
        }
    ]
}

...而且这些转义实际上都定义了完全正常的字符,所以:

{
    "places": [
        {
            "name": "New Orleans,\n US (New Lakefront - NEW)",
            "code": "NEW"
        }
    ]
}
于 2014-08-03T08:27:33.910 回答
2

阅读http://json.org/

{
    "places": [
        {
            "name": "New\\x20Orleans,\\x20US\\x20\\x28New\\x20Lakefront\\x20\\x2D\\x20NEW\\x29",
            "code": "NEW"
        }
    ]
}
于 2014-08-03T08:40:53.600 回答