Javascript parse()返回字符串而不是对象
我不想提出一个新的问题,尽管在同一个话题上已经有很多问题被提出了,但我真的不明白为什么这不起作用 我正在尝试使用以下代码创建JSON对象:Javascript parse()返回字符串而不是对象,javascript,json,Javascript,Json,我不想提出一个新的问题,尽管在同一个话题上已经有很多问题被提出了,但我真的不明白为什么这不起作用 我正在尝试使用以下代码创建JSON对象: var p = JSON.stringify(decodeJSON('{{post.as_json}}')) var post = JSON.parse(p); console.log(post); // Debug log to test if code is
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}}');
这将起作用这是因为
decodeJSON
返回一个字符串,而JSON.stringify
将字符串转换为另一个字符串
另一方面,您对字符串使用了JSON.strigify()
方法。您应该字符串化对象,而不是字符串
stringify()将javascript对象转换为JSON文本并存储
一串
当您使用JSON.parse
时,您将获得由decodedJSON
函数返回的字符串,而不是对象
解决方案:
var p = JSON.stringify('{{post.as_json}}');
var post = JSON.parse(p);
console.log(post);
它给了我未捕获的SyntaxError:Unexpected token'在
位置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。我认为这也可能是原因。因此我尝试将所有“
替换为”
,但随后我得到了一个无效标记错误。似乎您正在使用模板引擎。如果是,您所要做的就是var post={{post.as_json}代码>到此为止。然而,这假设as_json
确实返回json,但情况似乎并非如此。你应该先把它修好。其他一切都只是一个黑客的解决方法。它返回额外的HTML符号,如'
我使用decodeJSON
post来删除它。为什么不在服务器上解码HTML实体?我假设您使用的是Python:。它在JSON的位置1给出了未捕获的语法错误:意外标记