json_decodeこの質問で: validated json question私は間違って何をしている誰に教えていただけますか?または何が起こっている。前もって感謝します。JSON空の配列は、私は配列にJSONに変換し、次のコードをしている
私は私の$ strをエコーするとき、私は、次を得る:PHPマニュアルから
json_decodeこの質問で: validated json question私は間違って何をしている誰に教えていただけますか?または何が起こっている。前もって感謝します。JSON空の配列は、私は配列にJSONに変換し、次のコードをしている
私は私の$ strをエコーするとき、私は、次を得る:PHPマニュアルから
のあなたはjson_decode
有効なJSONない文字列に渡しているので、多分、これはNULL
が返される理由です。
私は、エラーコードを検査するコメントからわかるように
はちょうどJSON文字列が構文エラーを有することを意味する定数JSON_ERROR_SYNTAX
に対応4
を与える生成しました。 (http://php.net/manual/en/function.json-last-error.phpを参照)
あなたは
$str = file_get_contents('http://localhost/data.json');
から得るもの(エコー)検査すべきは、(あなたはあなたの答えを編集し、それを投稿する - またはそれの一部)
有効ではないことを確認してください。JSON
;問題はそこにある:data.json
。
あなたが何かを修正して、data.json
から取得すると、私はあなたが実際にフェッチされたデータにhtml_entity_decode
を使用することを保証するでしょう。
htmlでエンコードされたJSONデータを持つのは「奇妙」です。あなたがdata.json
から何を得るを見てみると
UPDATE
JSONデータが
(私は
Sの存在を見るように)これは、実際には奇妙である、実際にHTMLエンティティを含んでいるように見えます正しい方法はdata.json
の生成方法を修正することです非HTMLエンコード JSONデータが返され、charsetはUTF-8で、応答コンテンツタイプはContent-Type: application/json
です。
data.json
はどこから来たのか、それを生成するコードはどこにあるのか分かりません。最終的に別の回答を投稿することがあります。
ここではクイックフィックスがありますが、適切なアプローチは私が上で提案したものであれば可能です。あなたがhtmlエンティティ、非破断スペースをデコードしたよう
は、JSONエンコードされたデータのための有効でないこと(バイトは196、160値)2バイトUTF-8文字になります。
アイデアは、これらの文字を削除することです。あなたのコードは次のようになります:
私の編集した回答を参照してください – FutureCake
@FutureCakeは答えを更新しました。 – Paolo
あなたは本当に感謝の男のMVPです!今私は何かが間違ってもう一度おかげで参照してください:) – FutureCake
http://php.net/manual/en/function.json-decode.php
戻り:
...
NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit
だから、きっとjson_decode()
に渡されたJSON文字列が有効ではありません。
html_entity_decode
を取得するので、私のjsonが再帰制限を超えている場合、これをどのように修正するのですか?取得データはクライアントからのものです。だから私はおそらく彼にjsonを変更するように頼むことはできません。 – FutureCake
@FutureCake過大な再帰によってエラーが発生するのではなく、構文エラーが発生します(詳細は私の答えを参照してください) – Paolo
'html_entity_decode'ステップなしで' json_decode($ str、true) 'だけ試しましたか? – rickdenhaan
'json_decode'メソッドの後に' json_last_error() 'を表示します。 –
私はhtml_entity_decodeなしで試してみましたが、それでもnullを返しました。私はjson_last_errorを印刷するときに私は4 – FutureCake