繁体   English   中英

JSON.parse() 返回一个字符串而不是对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM