PHP で JSON を解析する方法

Jun 23, 2016 pm 02:31 PM

構文を取得すれば、JSON ファイルまたは文字列の解析は XML の解析と同じくらい簡単です。このチュートリアルでは、その構文を解析して学習する方法を示します。ただし、始める前に、まだ知らない場合に備えて、PHP 配列の命名規則を確立しましょう。




次の PHP 配列を見てください。

$arrayName[key]=value;
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

PHP の配列には 3 つの部分があります。使用される名前または変数、キー (連想または数値)、およびそのキーの値。

PHP で JSON 文字列またはファイルを読み取ったり解析したりするとき、基本的に行うことは、一連のキーを変数なので、その変数は連想配列になります。連想または数値という用語を聞いたことがない方のために付け加えておきますが、数値とは単に数値をキーとして使用していることを意味します。

規約がわかったので、単純な JSON 文字列を見てみましょう。

$string='{"name":"John Adams"}';
ログイン後にコピー

次のように考えることができます。値「John Adams」を保持するキー「name」としての文字列。括弧に注目してください。括弧はキーの配列を区切るために使用されます。したがって、この JSON 文字列に次の命名規則を与えることができます

{"key":"value"}
ログイン後にコピー

PHP で JSON を解析するには、関数 json_decode を使用します。この関数は、最初のパラメーターとして json 文字列を受け取り、オプションのブール値 (true/false) を受け取ります。 2 番目のパラメータ。 2 番目のパラメーターは、true に設定されている場合、json 文字列を連想配列として返します。設定されていない場合は、オブジェクトを返します。 2 つのオプションの主な違いは、キーを参照するために使用する構文です。今のところ、より使い慣れた連想配列を返すように 2 番目のパラメーターを true に設定しますが、オブジェクトについても説明します。

これで、この新しい関数について知ってください。あなたの php ファイルを私のもののように見せてください。

$string='{"name":"John Adams"}';$json_a=json_decode($string,true);
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

2 番目のパラメータを true に設定して json_decode を使用すると、変数 $json_a に連想配列が割り当てられるため、$json_a は配列になります。連想配列を参照するために「_a」を使用します。後で $json_o を使用して、json をオブジェクトとして保持する変数を参照しますが、任意の変数名を使用できます。

上記のコードを次のように翻訳しましょう。同じことを行う、よりよく知られた基本的なスニペットです。

$json_a=array("name"=>"John Adams");// or also$json_a["name"]="John Adams";
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これで、「$json_a」で何ができるかは明らかですよね? 「name」の内容を表示するには、次のように $json_a[name] を単に echo します

echo $json_a[name];// and you should see the name John Adams printed on your browser.
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

それは簡単でした。今度は同じ JSON 文字列を使用しましょう。ただし、今回は 2 番目のパラメータを設定しません。オブジェクトを取得します。 php ファイルに次のコードを入力します。

$string='{"name":"John Adams"}';$json_o=json_decode($string);
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

今回は、配列を返す代わりに、json_decode はオブジェクトを返しています。オブジェクトという言葉は少し怖く聞こえるかもしれませんが、これはまったく難しいことではありません。

「名前」の内容を表示するには、これを行うだけです

echo $json_o->name;
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

違いがわかりますか$json_a と $json_o のコンテンツの出力の間で?それは正しい!唯一の違いは、$json_o では先頭の "]" を削除し、"[" を "->" に置き換えることです。もう少し面白くしてください。この時点までの php ファイルの内容は次のようになります

echo $json_a[name];// andecho $json_o->name;// will both display “John Adams”
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

$string 変数の値を変更するときは常に、このチュートリアルの残りの部分では最後の 2 行を json_decode で保持してください。

$string='{"name":"John Adams"}';// create object from string$json_o=json_decode($string);// create array from string$json_a=json_decode($string,true);
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

$string の新しい見た目から推測できるように、キーと値の各セットをカンマで区切ります。したがって、年齢の値 (40 歳) を表示するには、次の 2 つの方法のいずれかを使用できます。

$string='{                     "name":"John Adams",                     "age":"40"                   }';$json_o=json_decode($string);$json_a=json_decode($string,true);
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

しかし、この JSON 文字列はまだ単純すぎるため、1 つのキーに 2 つのキーを割り当ててみませんか。新しい JSON 文字列は次のようになります。

// associative array modeecho $json_a[age];// object modeecho $json_o->age;
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これまでに行ったことは、名前「John Adams」を 2 つの「サブキー」に分離したことです。このようにして、これらの新しいキーの値を表示できます。

$string='{                     "name":{"first":"John","last":"Adams"},                     "age":"40"                   }';
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ここまでは、おそらく json で使用されている記号 [ と ] を見たことがあるでしょう。それは新しい $string 変数に含まれるものだからです。

// array method  // display first name echo  $json_a[name][first];  // display last name echo  $json_a[name][last];// object method  // display first name  echo $json_o->name->first;  // display last name  echo $json_o->name->last;
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

We use [ and ] to indicate that we have an array of keys, that is more than one set of { }'s. That means then, that this string has two arrays , each of them separated by { and } and followed by a comma except for the last one. This array is numeric, so to access "age" in the second array we'll do the following.

// remember that arrays start at zero, that's why we use 1 to refer to the second array// array methodecho $json_a[1][age];// object methodecho $json_o[1]->age;
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

In your web development career you will encounter yet another type of json string.

$string='{"person":         [            {                "name":{"first":"John","last":"Adams"},                "age":"40"            },            {                "name":{"first":"Thomas","last":"Jefferson"},                "age":"35"            }         ]         }';
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

This string is just like the previous one except that we have added {"person": at the beginning and to close, we added a } at the end.

What we have here is two "person" arrays one for John and one for Thomas. You can display both last names with this snippet of code.

// array method     // first person "0"echo $json_a[person][0][name][last];    // second person "1"echo $json_a[person][1][name][last];// object method   // first person "0"echo $json_o->person[0]->name->last;  // second person "1"echo $json_o->person[1]->name->last;
ログイン後にコピー

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

It all seems fine, until we have a 100 "person" array or more! But don't worry. Because these arrays are numeric we can use a loop to go through a huge array like that. I like to use "foreach" loops but you can use "while", "for" or "do while" loops if you want. The next snippet will show you how you can get each person's information using a foreach loop.

$string='{"person":[            {                "name":{"first":"John","last":"Adams"},                "age":"40"            },            {                "name":{"first":"Thomas","last":"Jefferson"},                "age":"35"            }         ]}';$json_a=json_decode($string,true);$json_o=json_decode($string);// array methodforeach($json_a[person] as $p){echo 'Name: '.$p[name][first].' '.$p[name][last].'Age: '.$p[age].'';}// object methodforeach($json_o->person as $p){echo 'Name: '.$p->name->first.' '.$p->name->last.'Age: '.$p->age.'';}
ログイン後にコピー

Reading a JSON is just as easy and it does not have a special extension, the file just has to output a json string. To read a JSON file you can use the function file_get_contents like this $string=file_get_contents(filepath) . Now pass $string to json_decode and parse.

From:http://webhole.net/2009/08/31/how-to-read-json-data-with-php/

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

See all articles