簡體   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