Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript parse()返回字符串而不是对象_Javascript_Json - Fatal编程技术网

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

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

我不想提出一个新的问题,尽管在同一个话题上已经有很多问题被提出了,但我真的不明白为什么这不起作用

我正在尝试使用以下代码创建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}}');

这将起作用

这是因为
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给出了未捕获的语法错误:意外标记