5

インターウェブはこれに関しては役に立ちません。を使用して ColdFusion でデータをエンコードserializeJSONし、PHP を使用してデコードしようとしていjson_decodeます。json_decodeほとんどの場合、これは正常に機能しますが、場合によってはNULL. 明らかな原因を探しましたが、serializeJSON期待どおりにフォーマットされているようです。他に何が問題になる可能性がありますか?

更新: 何人かの人々が (賢明にも) 問題の原因となっている出力を投稿するように私に依頼しました。結果セットがすべてのデータ (合計 565,135 ASCII 文字の 2300 以上の賃貸物件の情報をリストする) であることを発見したことを除いて、そうします! これは問題になる可能性がありますが、PHP ドキュメントには文字列の最大サイズに関する記述はありませんでした。そこでの制限要因は何でしょうか?羊?

更新 II: 問題は、何人かのユーザーが Microsoft Word のテキストを「スマート」引用符でコピー アンド ペーストしたことだったようです。それらの厄介なユーザー...

4

4 に答える 4

2

UTF-8 で操作し、PHP にその事実を知らせることもできます。

PHPjson_decodeがUTF-8 JSON文字列をデコードできないという問題がありました(あなたが持っている中引用符以外のいくつかの「奇妙な」文字を使用)。私の解決策は、PHP への送信を行っていた HTML ページに Content-Type メタ タグを挿入することで、私が UTF-8 モードで作業していることを PHP に示唆することでした。そうすれば、送信されたデータのコンテンツ タイプ (JSON 文字列) も UTF-8 になります。

<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>

その後、PHPjson_decodeは文字列を適切にデコードできました。

于 2008-10-05T04:59:59.687 に答える
1

この問題を確実に再現できますか? もしそうなら、nullを返すサンプルデータを投稿できますか? 私はあなたがこれを知っていると確信していますが、そうでないかもしれない他の人がこれに出くわすための情報提供のために、RFC 4627は JSON について説明しており、有効な JavaScript が有効な JSON であると仮定するのはよくある間違いです。JSON は JavaScript のサブセットと考えたほうがよいでしょう。

編集に応じて:

PHPスクリプトに情報が入力されていることを確認し(json_decodeに渡される前に)、その情報を検証することをお勧めします(特にエラーを確実に再現できる場合)。便利なオンラインバリデーターを試すことができます。非常に限られた情報に基づいて、おそらくタイムアウトしていて、すべてのデータを取得していないように聞こえますか? そのような大規模なデータセットが必要ですか?

于 2008-10-01T01:55:16.197 に答える
0

別のパーサーで解析して、エラーを探すこともできます。Python の JSON パーサーが非常に高品質であることは知っています。Python がインストールされている場合は、テキストをdemjsonの構文チェッカーで簡単に実行できます。非常に大きなデータセットの場合は、私のライブラリjsonlibを使用できます。メモリの使用量は demjson よりも多くなりますが、C で記述されているため実行速度が速くなります。

于 2008-10-01T02:21:29.740 に答える