2012-01-03 5 views
1

https://www.googleapis.com/freebase/v1/search?query=madonna#JSONは

PHPSのjson_decodeを破るJSON結果はPHPSのjson_decodeを壊しています。正確には、次の文字列はデコードを破っています: "Sticky \ Swamp Tour"。

ブラウザは、しかし、それを理解することができるように見える:http://jsfiddle.net/nggX2/ & http://jsfiddle.net/QUVFt/

http://jsonlint.com/は、それが無効JSONだと主張しています。 PHP側の

私が試してみた:何が起こっているのhttp://codepad.viper-7.com/suUbQDhttp://codepad.viper-7.com/QjqCH7

任意の考えを?

+0

なぜJSON形式ではない文字列をデコードしようとしていますか? – Michael

+0

なぜJSON形式ではないとお考えですか? – Slavic

+0

jsonlint.comは私にとって無効だと言います。私はJSONで '\ x'表記が許されているとは思わない。それは '\ u0026'ではないでしょうか? – cmbuckley

答えて

7

これは無効なJSONです。そのURLからの応答が間違っています - JSONでは\xXXの2桁の16進バイナリエスケープシーケンスは許可されません。\uXXXXユニコードコードポイントのエスケープシーケンスのみが許可されています。ここでは&にする必要がありますが、エスケープシーケンスは必要ありません。

google/freebaseが無効なJSONを出力している理由がわかりません。

+1

なぜブラウザはそれを理解していますか? – Peeter

+0

JSON( '$ .getJSON()')を評価するためにブラウザが受け入れられるJSON( 'JSON.parse'の例)や' eval() 'JSONPの例で)。この動作に依存してはいけません。 –

+1

'google/freebaseが無効なJSONを出力している理由はわかりません。 ' - 実際、これは報告する必要があるバグのようです。そして+1。 – DaveRandom

1

あなたのJSONは次のようになります。それはエスケープ文字であるため、

"Sticky \\x26amp; SweetTour" 

スラッシュは、エスケープする必要があります。

+0

Breaks @ http://jsfiddle.net/arq5J/ – Peeter

+0

@Peeterあなたは一度だけ文字列をエスケープしているので、ダブルスラッシュはあなたの一重引用符で食べられます。これを試してください:http://jsfiddle.net/arq5J/1/ – Kekoa