ホームページ >バックエンド開発 >PHPの問題 >PHPのJSONデータを配列に変換する

PHPのJSONデータを配列に変換する

王林
王林オリジナル
2023-05-23 11:14:36445ブラウズ

PHP では、処理のために JSON データを配列形式に変換する必要がある場合があります。現時点では、 json_decode() 関数を使用して JSON データを PHP 配列に変換できます。この記事では、json_decode() 関数を使用して JSON データを配列に変換する方法を紹介し、いくつかのよくある質問に答えます。

JSON は軽量のデータ交換形式で、理解しやすく、使いやすく、拡張しやすいという利点があるため、データの送信に広く使用されています。 PHP は、効率的かつ高速で、学習と使用が簡単な、弱い型付けのプログラミング言語です。 JSON 形式は PHP でネイティブにサポートされているため、開発中に PHP を使用して JSON データを処理すると非常に便利です。

json_decode() 関数を使用して JSON データを配列に変換する

次は、JSON データを配列に変換するサンプル コードです:

$json = '{"name":"Tom","age":"20","sex":"male"}';

$arr = json_decode($json, true);

var_dump($arr);

出力結果:

array(3) {
  ["name"]=>
  string(3) "Tom"
  ["age"]=>
  string(2) "20"
  ["sex"]=>
  string(4) "male"
}

ご覧のとおり、 json_decode() 関数は JSON データを PHP 配列に変換します。この関数の 2 番目のパラメーターは true または false に設定でき、true に設定すると連想配列を返し、false または未設定に設定するとオブジェクトを返します。

以下はオブジェクトを返すサンプルコードです:

$json = '{"name":"Tom","age":"20","sex":"male"}';

$obj = json_decode($json);

var_dump($obj);

出力結果:

object(stdClass)#1 (3) {
  ["name"]=>
  string(3) "Tom"
  ["age"]=>
  string(2) "20"
  ["sex"]=>
  string(4) "male"
}

JSON文字列を解析した際に文字エンコーディングが異なる場合UTF-8 の場合は、UTF-8 エンコードに変換する必要があります:

$json = '{"name":"Tom","age":"20","sex":"male"}';

$json = mb_convert_encoding($json, 'UTF-8', 'auto'); // 将编码转换为 UTF-8

$arr = json_decode($json, true);

var_dump($arr);

FAQ

1. JSON 解析エラーに対処するにはどうすればよいですか?

JSON データの処理プロセス中に、JSON データ形式またはエンコード形式の問題により解析エラーが発生する場合があります。この時点で、 json_last_error() 関数を使用して、解析エラーの原因を取得できます。この関数は、JSON 解析エラーのタイプを表す数値を返します。エラー タイプの定義は次のとおりです。

  • JSON_ERROR_NONE: エラーなし、解析は成功しました。
  • JSON_ERROR_DEPTH: JSON データが複雑すぎるため、設定された最大深さを超えています。
  • JSON_ERROR_STATE_MISMATCH: JSON データ形式が正しくありません。
  • JSON_ERROR_CTRL_CHAR: 不正な制御文字があります。
  • JSON_ERROR_SYNTAX: JSON データに構文エラーがあります。
  • JSON_ERROR_UTF8: JSON データは UTF-8 でエンコードされていません。

次のコードを使用して、解析エラーの原因を取得します。

$json = '{"name": "Tom""age": "20"}'; // 注意,这里有错误

$arr = json_decode($json, true);

if (json_last_error() !== JSON_ERROR_NONE) {
    switch (json_last_error()) {
        case JSON_ERROR_DEPTH:
            echo 'JSON 数据过于复杂,超出了设置的最大深度';
            break;
        case JSON_ERROR_STATE_MISMATCH:
            echo 'JSON 数据格式不正确';
            break;
        case JSON_ERROR_CTRL_CHAR:
            echo 'JSON 数据中有不正确的控制字符';
            break;
        case JSON_ERROR_SYNTAX:
            echo 'JSON 数据存在语法错误';
            break;
        case JSON_ERROR_UTF8:
            echo 'JSON 数据不是 UTF-8 编码';
            break;
        default:
            echo '未知的 JSON 解析错误';
            break;
    }
}

var_dump($arr);

出力結果:

JSON 数据存在语法错误
NULL

上記のように、json_last_error() 関数は、解析エラーを取得して問題を迅速に発見します。

2. 非標準の JSON 形式の問題にどう対処するか?

実際の使用では、最後の属性値の後にカンマが使用されているなど、一部の JSON データは最も標準化された形式ではない場合があります。 json_decode() 関数を使用してこの JSON データを解析すると、NULL が返されます。この時点で、処理にサードパーティのライブラリを使用できます。

以下は、json5 ライブラリを使用して JSON 非標準形式を処理するサンプル コードです:

// 首先,安装 json5 库
// composer require symfony/polyfill-mbstring
// composer require webonyx/json5

$json = '{"name": "Tom", "age": 20, }'; // 注意,这里有错误

use Json5Parser;

$parser = new Parser();
$arr = $parser->decode($json);

var_dump($arr);

出力結果:

array(2) {
  ["name"]=>
  string(3) "Tom"
  ["age"]=>
  int(20)
}

上記のように、簡単に実行できます。 json5 ライブラリを使用して処理される JSON 非標準形式の問題。

3. JSON データのクロスドメイン アクセスの問題にどう対処するか?

JSON データのクロスドメイン アクセスの問題は、セキュリティ上の理由から、ブラウザーがフロントエンドが Ajax リクエストを介して他のドメインのリソースにアクセスすることを禁止していることを意味します。このとき、いくつかの設定を行う必要があります。

以下は、PHP を使用してクロスドメイン アクセスを実現するためのサンプル コードです。

header('Access-Control-Allow-Origin: *'); // 允许所有域名访问
header('Content-Type: application/json');

$json = '{"name": "Tom", "age": 20, "sex": "male"}';

echo $json;

上で示したように、PHP で Access-Control-Allow-Origin ヘッダーを設定すると、他のドメイン名がアクセスできるようになります。クロスドメインアクセスになります。

結論

これまで、 json_decode() 関数を使用して JSON データを配列に変換する方法と、JSON データの処理で発生するいくつかの一般的な問題を解決する方法を紹介しました。この記事が皆様のお役に立てれば幸いです。

以上がPHPのJSONデータを配列に変換するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。