PHPにおけるJSON解析時のパーサーエラー

関数json_last_errorを使用すると、 JSONのパース中に具体的にどのエラーが 発生したかを知ることができます。 どのように行うか見てみましょう。 不正なJSONがあるとします:

php<?php
  $json = '["a", "b", "c",]';
?>

これを解析してみましょう:

php<?php
  $data = json_decode($json);
  var_dump($data); // nullを出力します
?>

エラーが発生したため、json_last_errorを 呼び出すとそのエラー番号が返されます:

php<?php
  $error = json_last_error();
  var_dump($error); // エラー番号
?>

返される番号は、PHPの特別な定数と 比較することができます。 これに基づいて、さまざまなタイプのエラーを キャッチするコードを書くことができます:

php<?php
   switch (json_last_error()) {
    case JSON_ERROR_NONE:
      echo 'エラーはありません';
    break;
    case JSON_ERROR_DEPTH:
      echo 'スタックの最大深度に達しました';
    break;
    case JSON_ERROR_STATE_MISMATCH:
      echo '不正なビットまたはモードの不一致';
    break;
    case JSON_ERROR_CTRL_CHAR:
      echo '不正な制御文字';
    break;
    case JSON_ERROR_SYNTAX:
      echo '構文エラー、不正なJSON';
    break;
    case JSON_ERROR_UTF8:
      echo '不正なUTF-8文字、おそらくエンコードが不正です';
    break;
    default:
      echo '不明なエラー';
    break;
  }
?>
Задание 1

あるJSON文字列が与えられます。 これをPHPのデータ構造に解析してください。 解析結果、またはJSONを解析できなかった場合は その理由を出力してください。