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

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

May 23, 2023 am 11:14 AM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 8 JIT(Just-in-Time)コンピレーション:パフォーマンスの向上方法。 PHP 8 JIT(Just-in-Time)コンピレーション:パフォーマンスの向上方法。 Mar 25, 2025 am 10:37 AM

PHP 8のJITコンピレーションは、頻繁に実行されるコードをマシンコードにコンパイルし、重い計算でアプリケーションに利益をもたらし、実行時間を短縮することにより、パフォーマンスを向上させます。

PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。 PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。 Mar 26, 2025 pm 04:18 PM

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。 OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。 Mar 26, 2025 pm 04:13 PM

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

PHP暗号化:対称と非対称暗号化。 PHP暗号化:対称と非対称暗号化。 Mar 25, 2025 pm 03:12 PM

この記事では、PHPの対称的および非対称暗号化について説明し、適合性、パフォーマンス、セキュリティの違いを比較しています。対称暗号化はより速く、バルクデータに適していますが、非対称は安全なキー交換に使用されます。

PHPを使用してデータベースからデータを取得するにはどうすればよいですか? PHPを使用してデータベースからデータを取得するにはどうすればよいですか? Mar 20, 2025 pm 04:57 PM

記事では、PHPを使用してデータベースからデータを取得し、手順、セキュリティ対策、最適化手法、およびソリューションを使用した一般的なエラーをカバーしています。

PHP認証&承認:安全な実装。 PHP認証&承認:安全な実装。 Mar 25, 2025 pm 03:06 PM

この記事では、不正アクセスを防ぎ、ベストプラクティスの詳細、セキュリティ強化ツールの推奨を防ぐために、PHPで堅牢な認証と承認の実装について説明します。

PHPで準備された声明の目的は何ですか? PHPで準備された声明の目的は何ですか? Mar 20, 2025 pm 04:47 PM

PHPの準備されたステートメントは、SQLインジェクションを防止し、コンピレーションと再利用を通じてクエリパフォーマンスを改善することにより、データベースのセキュリティと効率を強化します。

PHP APIレート制限:実装戦略。 PHP APIレート制限:実装戦略。 Mar 26, 2025 pm 04:16 PM

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

See all articles