[英]JSON.parse() returns a string instead of object
即使在同一主题上已经提出了许多问题,我也不想提出一个新问题,但我真的不知道为什么这不起作用。
我正在尝试使用以下代码创建一个 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)
而不是接收对象时,我会返回一个字符串。 可能是什么原因?
这是因为decodeJSON
返回一个字符串,而JSON.stringify
将该字符串转换为另一个string 。
另一方面,您在字符串上使用了JSON.strigify()
方法。 您应该字符串化一个对象,而不是字符串。
JSON.stringify() 将 javascript 对象转换为 json 文本并将其存储在字符串中。
当您使用JSON.parse
您获得的是由decodedJSON
函数返回的字符串,而不是对象。
解决方案:
var p = JSON.stringify('{{post.as_json}}');
var post = JSON.parse(p);
console.log(post);
它给了我 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.stringify
。 所以在解析这个字符串的结果将是一个字符串。 实际上,您已字符串化两次并解析一次。 如果您再次解析它,您将获得一个 JSON。 但是对于解决方案,请避免两次字符串化。
替换您的代码。
var p = decodeJSON('{{post.as_json}}');
那可行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.