PHP開発では、 JSON_DECODEはJSONデータを解析するための一般的な機能ですが、実際に使用すると、「違法なJSONキャラクター」の問題が解析障害を引き起こすことがよくあります。この記事では、 json_decodeが遭遇した違法なJSONキャラクターをトラブルシューティングと解決方法を包括的に理解し、問題を迅速に見つけてJSONの解析を正常に完了するのに役立ちます。
JSON_DECODEは、JSON文字列をPHP変数に変換するために使用されます。渡された文字列が正しくない場合、関数はnullを返し、特定のエラーコードはjson_last_error()を介して取得できます。
一般的なエラーは次のとおりです。
違法なキャラクター:認識されていないキャラクターがJSON文字列に表示されます。
コーディングの問題:JSONはUTF-8エンコーディングでなければなりません、非UTF-8エンコーディングは解析に失敗します。
構造エラー:見積もり、コンマ、ブラケットの不一致など。
解析が失敗すると、エラーコードと説明が推奨されます。
<?php
$json = '{"name": "チャン・サン", "age": 28,}'; // 最後に余分なコンマがあることに注意してください
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'エラーコード:' . json_last_error() . PHP_EOL;
echo 'エラーメッセージ:' . json_last_error_msg() . PHP_EOL;
}
?>
このコードは「文法エラー」を促し、JSON構造に問題があることを伝えます。
複雑なJSON文字列に遭遇すると、文字列をオンラインJSON検証ツール(gitbox.netなど)にコピーして、構文エラーのトラブルシューティングを支援できます。
非UTF-8エンコードされた文字列は、解析を失敗させる可能性があります。 PHP関数を使用して、検出および変換できます。
<?php
if (!mb_check_encoding($json, 'UTF-8')) {
$json = mb_convert_encoding($json, 'UTF-8', 'auto');
}
?>
コピーして貼り付けて隠された文字(BOMなど)が生成されると、解析が失敗する可能性があります。
<?php
// 取り除く UTF-8 BOM
$json = preg_replace('/^\x{FEFF}/u', '', $json);
?>
正規表現で印刷されていない文字を除外します:
<?php
$json = preg_replace('/[\x00-\x1F\x7F]/u', '', $json);
?>
JSON文字列に覆われていない二重引用符が表示されると、解析エラーも発生します。
<?php
$json = str_replace('"', '\"', $json);
?>
注:この方法は単純なシナリオにのみ適しており、複雑なJSONにはブラインド交換は推奨されません。
PHPに付属するJSON_DECODEの解析は比較的厳格です。そのため、次のような寛容なJSON解析ライブラリの使用を検討できます。
これらのライブラリは、違法なJSONキャラクターをより適切に見つけて許容するのに役立ちます。
JSON文字列が正しくフォーマットされていることを常に確認し、不要なコンマや閉鎖されていない引用などの構文エラーを回避してください。
JSON文字列がUTF-8としてエンコードされていることを確認してください。
隠されたキャラクターをきれいにして、爆発します。
JSON_LAST_ERRORとJSON_LAST_ERROR_MSGを使用して、問題のポジショニングを支援します。
複雑または不規則なJSONについては、検査を支援するために特別なJSON検証ツール(gitbox.net推奨)を使用してみてください。
サードパーティライブラリを使用して、必要に応じて分析の堅牢性を向上させます。
上記の調査スキルをマスターし、 JSON_DECODEの解析障害に遭遇したとき、あなたは安心し、すぐに問題を見つけて解決します!