2016-04-18 11 views
1

私はWikipediaからJSONデータを取得しています。しかし、私はそれをきれいにストリンジェントにすることはできませんし、なぜ私は理解していません。Javascript:JSON.stringifyが期待通りに機能しない

ここに私のコードです。

request({url:formQuery(query), encoding:"utf8"}, (err, res, body) => { 
    if (err) handleErr(err) 
    console.log(JSON.stringify(body, null, 3)) 
}) 

私はちょうど平野はconsole.log(ボディ)、このようなJSONの出力を使用する場合:

{"continue":{"rvcontinue":"20160314150329|710029514","continue":"||"},"query":{"normalized":[{ ... 

をしかし、私は(上記のように)文字列化を使用している場合、それは次のようになります。

"{\"continue\":{\"rvcontinue\":\"20160314150329|710029514\",\"continue\":\"||\"},\"query\":{\"normalized\":[{ ... 

Stringifyは文字列の先頭に引用符を追加し、後続のものをエスケープします。

どうしてですか?どんな助けも歓迎されるでしょう。

+0

多分あなたはオブジェクトをしたいですか? 'JSON.parse(...);'を試してください – Petroff

+0

本文はすでに文字列です。なぜ文字列化してその出力を得るのですか? –

+0

'JSON.stringify'はjsonを文字列に変換します。正しい出力です。 –

答えて

1

JSONデータは問題ありません。入力に引用符があるため、関数addは出力にスラッシュします。 JSON文字列/出力の解析時にプロパティ名の引用符をエスケープする必要はありません

0

stringifyを使用しない場合、以下のように使用できます。

var oResultData = {"continue":{"rvcontinue":"1111","continue":"1111111"}}; 
var myRvcontinue = oResultData.continue.rvcontinue; 
console.log(myRvcontinue); // 1111 
1

最初にボディストリングをJSONオブジェクトに解析する必要がありました。私はボディの文字列を解析する場合、それは動作します。

これは正常に動作します:あなたの要求の結果は、すでにあなたのオブジェクトを表す文字列であるため、

request({url:formQuery(query), encoding:"utf8"}, (err, res, body) => { 
    if (err) handleErr(err) 
    let json = JSON.parse(body); 
    console.log(JSON.stringify(json, null, 3)) 

}) 
+0

唯一の "JSONオブジェクト"は[組み込み](http://ecma-international.org/ecma-262/6.0/index.html#sec-json-object)のものです。オブジェクトを作成するために解析できるJSON形式の文字列があります。 – RobG

+0

JSONがエンコードされた文字列を取得すると、それをデコードして再びエンコードします。それは少し生産的ではありませんか?これの唯一の理由は、人間が読めるエンコーディングが必要な場合です。 –

0

です。 これを再度文字列化すると、オブジェクトを表す文字列を表す文字列が取得されます。

関連する問題