解析json时出错期待'{','['**

时间:2014-08-03 08:25:42

标签: json jsonlint

这是json。

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

    ]
}"

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

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

请解释一下json有什么问题,我能纠正吗?

2 个答案:

答案 0 :(得分:5)

如果你的字面意思是字符串作为一个整体,是你的JSON文本(包含非JSON的东西),那么有三个问题:

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

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

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

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

    {"prop": "value"}
    
    [1, 2, 3]
    

    大多数JSON解析器支持解析片段,例如独立字符串。 (例如,JavaScript的JSON.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要求所有键和字符串都在 double 引号(")中,而不是单引号(')。它也不允许字符串文字中的文字换行符(使用\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"
            }
        ]
    }
    

答案 1 :(得分:2)

阅读http://json.org/

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