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

5

尽管已经有很多关于这个话题的问题,但我不想再开一个新问题,但我真的不知道为什么这不起作用。

我正在尝试使用以下代码创建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)时,我收到的不是一个对象,而是一个字符串。这可能是什么原因呢?


4
这不是一个 JSON 字符串。JSON 使用的是双引号 ", 而不是单引号 ' - baao
@baao 我也认为这可能是原因。所以我试着用双引号替换所有的单引号,但是我得到了一个“无效标记”错误。 - Dorian Dore
看起来您正在使用一个模板引擎。如果是,请只需要添加 var post = {{post.as_json}}; 即可完成。不过,这需要假设 as_json 方法确实返回的是 JSON 数据,但似乎并非如此。您应该首先修复这个问题。其他所有的代码都只是一些 hacky 的解决方案。 - Felix Kling
它返回额外的HTML符号,如',我使用decodeJSON后处理来删除它们。 - Dorian Dore
1
为什么不在服务器上解码HTML实体?我假设你正在使用Python:https://dev59.com/questions/p3I95IYBdhLWcg3w7SpZ。 - Felix Kling
2个回答

2

这是因为decodeJSON返回了一个字符串,而JSON.stringify将该字符串转换成了另一个字符串

另一方面,您在一个字符串上使用了JSON.stringify()方法。您应该对一个对象进行串行化,而不是字符串。

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); 

1
您的代码问题在于您对一个字符串本身执行了 JSON.stringify。因此,在解析此字符串的结果时,它仍将是一个字符串。实际上,您已经对其进行了两次字符串化和一次解析。如果您再次解析它,就会得到一个 JSON。但为了解决问题,请避免两次字符串化。
请在您的代码中进行替换。
var p = decodeJSON('{{post.as_json}}');

那会起作用


它给了我Uncaught SyntaxError: Unexpected token ' in JSON at position 1 - Dorian Dore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接