我的JSON有什么问题?

时间:2010-04-09 21:45:23

标签: json

有人注意到这个JSON有什么问题吗?它在JSONLint.com上验证,但Chrome和Firefox的原生JSON解析函数都无法正确解析它。

有什么想法吗?

{
        "result": "{\"players\":[{\"name\":\"User 522\",\"turn\":true,\"score\":0},{\"name\":\"User 925\",\"turn\":false,\"score\":5}],\"enableControls\":false}",
        "error": "null",
        "id": "7"
}

2 个答案:

答案 0 :(得分:3)

即使你看起来很奇怪,它也符合json规范。

在Firefox或Chrome中定义文字时,问题来自逃避问题。需要使用反斜杠转义“\”(反斜杠)字符。

示例1:

JSON.parse('{"key":"\""}'); breaks

示例2:

JSON.parse('{"key":"\\""}'); works

所以JSONLint.com是对的,Firefox也是对的,Chrome也是对的。

如果您通过ajax请求进行测试,则不会遇到此问题,因为转义将自动处理。您正在遇到问题,因为您想将json字符串作为文字提供(因此需要转义)

我希望这会对你有所帮助。

答案 1 :(得分:1)

我现在看到发生了什么。 result本身就是一个嵌入的json字符串。

让我重新组合并再次回答。

您的服务器在这里没有给您任何好处。

同样,给定的字符串将不解析,因此不是有效的JSON字符串。而且我没有看到按摩它来解析它的方法。

您是否确定这是要返回的字符串,或者这可能是调试器中字符串的可视化?

这不是有效的JSON文本,这是一个有点不正常的JavaScript文字。

您不解析文字,解析文本以获取文字。

你的文字会更好地表现为......

var obj = {
    result: {
        players: [{
            name: "User 522",
            turn: true,
            score: 0
        },
        {
            name: "User 925",
            turn: false,
            score: 5
        }],
        enableControls: false
    },
    error: null,
    id: 7
};

这是等效的JSON文本。尝试解析这个..

var json = '{"result":{"players":[{"name":"User522","turn":true,"score":0},{"name":"User925","turn": false,"score":5}],"enableControls":false},"error":null,"id":7}';

<击>