有人注意到这个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"
}
答案 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}';
击> <击> 撞击>