JSON.parse()返回一个字符串,而不是对象
尽管在这个相同的主题上已经打开了很多问题,但我还是不愿意提出一个新的问题,但是我完全不知道为什么这不是加工。JSON.parse()返回一个字符串,而不是对象
我试图创建下面的代码一个JSON对象:
var p = JSON.stringify(decodeJSON('{{post.as_json}}'))
var post = JSON.parse(p);
console.log(post); // Debug log to test if code is valid
而且decodeJSON
功能:
function decodeJSON(json) {
var txt = document.createElement("textarea");
txt.innerHTML = json;
return txt.value.replace(/u'/g, "'");
}
console.log(post)
返回以下JSON字符串:
{'content': 'kj fasf', 'uid': '4eL1BQ__', 'created': '07/09/2017', 'replies': [], 'tags': ['python'], 'by': {'username': 'Dorian', 'img_url': '/static/imgs/user_Dorian/beaut.jpg'}, 'likes': 0}
扫描完字符串后,我非常确定JSON是有效的,并且没有语法错误。但是,运行时JSON.parse(p)
而不是接收一个对象,我得到一个字符串。可能是什么原因?
您的代码中的问题是您对字符串本身执行JSON.stringify
。所以解析这个字符串的结果将是一个字符串。实际上,您已经过两次字符串并解析了一次。如果你再解析一次,你会得到一个JSON。但是为了解决方案避免两次字符串化。
替换您的代码。
var p = decodeJSON('{{post.as_json}}');
,将工作
它给了我'位置1 JSON'未捕获的SyntaxError:意外的令牌'' –
@DorianDore,看看我的更新答案。 –
这是因为decodeJSON
返回一个字符串,并JSON.stringify
轮流在另一串串。
另一方面,您对字符串使用了JSON.strigify()
方法。您应串联一个对象,而不是字符串。
JSON.stringify() turns a javascript object to json text and stores it in a string.
当您使用JSON.parse
你得到串通过decodedJSON
函数返回,不会反对。
解决方案:
var p = JSON.stringify('{{post.as_json}}');
var post = JSON.parse(p);
console.log(post);
It gives me Uncaught SyntaxError: Unexpected token ' in JSON at position 1
解决的办法是修改decodeJSON
方法。
function decodeJSON(json) {
var txt = document.createElement("textarea");
txt.innerHTML = json;
return txt.value.replace(/u'/g, '\"');
}
var p = decodeJSON('{{post.as_json}}');
var post = JSON.parse(p);
console.log(post);
这不是JSON字符串。 JSON使用''',而不是''' – baao
@baao我认为这也可能是原因,所以我尝试用'''替换所有''',但是然后我得到一个'Invalid token'错误。 –
看起来你似乎正在使用模板引擎。如果是的话,你所要做的就是'var post = {{post.as_json}};'并称它为一天。但是,这假定'as_json'确实返回JSON,这似乎并非如此。你应该先解决。其他的一切都只是一个怪异的解决方法。 –