2017-09-26 19 views
0

この同じトピックで多くの質問が開かれていますが、新しい質問を開くのは嫌ですが、なぜこれがどういうわけかはわかりませんワーキング。JSON.parse()はオブジェクトの代わりに文字列を返します

私は次のコードで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

+0

@baaoそれも原因である可能性があると思ったので、' ''を '' ''に置き換えようとしました。 –

+0

テンプレートエンジンを使用しているようです。はいの場合は、 'var post = {{post.as_json}};'を実行し、それを1日と呼びます。しかし、これは 'as_json'が本当にJSONを返すと仮定しています。最初に修正する必要があります。他のすべてはちょっとハックリな回避策です。 –

答えて

0

コードの問題は、文字列自体にJSON.stringifyを実行していることです。したがって、この文字列の解析結果は文字列になります。実際には、あなたは2回ストリンジェントして1回解析しました。もう一度解析すればJSONが得られます。しかし解決のためにストリンジェントを2回避けてください。

コードを置き換えます。

+0

JSONの位置1 @ –

+0

@DorianDoreに 'Uncaught SyntaxError:Unexpected token 'があ​​ります。私の更新された答えを見てください。 –

1
decodeJSONが文字列を返すためだ

、およびJSON.stringifyに動作します

var p = decodeJSON('{{post.as_json}}'); 

はなり 文字列文字列います。

一方、文字列にJSON.strigify()メソッドを使用しました。 オブジェクトで、の文字列ではなく、ストリングする必要があります。

JSON.stringify() turns a javascript object to json text and stores it in a string.

あなたは反対しないdecodedJSON関数によって返された文字列を得るJSON.parse使用。

ソリューション:

var p = JSON.stringify('{{post.as_json}}'); 
var post = JSON.parse(p); 
console.log(post); 

It gives me 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); 
関連する問題