ホームページ バックエンド開発 PHPチュートリアル PHP 言語で JSON_PHP を使用するためのチュートリアル

PHP 言語で JSON_PHP を使用するためのチュートリアル

Jul 20, 2016 am 10:57 AM
json php 交換 使用 存在する データ フォーマット 流れ 現在のところ

現在、JSONは最も人気のあるデータ交換形式の 1 つとなっており、主要な Web サイトのほぼすべての API がこれをサポートしています。

その設計上のアイデアについて説明するために、「データ型と JSON 形式」という記事を書きました。今日は、インターネット アプリケーション (特に API の作成) を開発するために知っておく必要がある、PHP 言語のサポートについてまとめたいと思います。

バージョン 5.2 以降、PHP は json_encode() 関数と json_decode() 関数をネイティブに提供し、前者はエンコードに使用され、後者はデコードに使用されます。

1. json_encode()

この関数は主に配列やオブジェクトをjson形式に変換するために使用されます。まず配列変換の例を見てください:

<ol class="dp-c">
<li class="alt"><span><span class="vars">$arr</span><span> = </span><span class="keyword">array</span><span> (</span><span class="string">'a'</span><span>=>1,</span><span class="string">'b'</span><span>=>2,</span><span class="string">'c'</span><span>=>3,</span><span class="string">'d'</span><span>=>4,</span><span class="string">'e'</span><span>=>5);  </span></span></li>
<li>
<span class="func">echo</span><span> json_encode(</span><span class="vars">$arr</span><span>); </span>
</li>
</ol>
ログイン後にコピー

結果は

<ol class="dp-c"><li class="alt"><span><span>{</span><span class="string">"a"</span><span>:1,</span><span class="string">"b"</span><span>:2,</span><span class="string">"c"</span><span>:3,</span><span class="string">"d"</span><span>:4,</span><span class="string">"e"</span><span>:5} </span></span></li></ol>
ログイン後にコピー

次にオブジェクト変換の例を見てください:

<ol class="dp-c">
<li class="alt"><span><span class="vars">$obj</span><span>->body = </span><span class="string">'another post'</span><span>;  </span></span></li>
<li>
<span class="vars">$obj</span><span>->id = 21;  </span>
</li>
<li class="alt">
<span class="vars">$obj</span><span>->approved = true;  </span>
</li>
<li>
<span class="vars">$obj</span><span>->favorite_count = 1;  </span>
</li>
<li class="alt">
<span class="vars">$obj</span><span>->status = NULL;  </span>
</li>
<li>
<span class="func">echo</span><span> json_encode(</span><span class="vars">$obj</span><span>); </span>
</li>
</ol>
ログイン後にコピー

結果は

<ol class="dp-c">
<li class="alt"><span><span>{  </span></span></li>
<li>
<span class="string">"body"</span><span>:</span><span class="string">"another post"</span><span>,  </span>
</li>
<li class="alt">
<span class="string">"id"</span><span>:21,  </span>
</li>
<li>
<span class="string">"approved"</span><span>:true,  </span>
</li>
<li class="alt">
<span class="string">"favorite_count"</span><span>:1,  </span>
</li>
<li>
<span class="string">"status"</span><span>:null  </span>
</li>
<li class="alt"><span>}  </span></li>
</ol>
ログイン後にコピー

json は utf-8 でエンコードされた文字のみを受け入れるため、json_encode のパラメータは() は UTF-8 エンコードである必要があります。それ以外の場合は、空の文字または null が返されます。中国語で GB2312 エンコードを使用する場合、または外国語で ISO-8859-1 エンコードを使用する場合は、この点に特別な注意を払う必要があります。

2. インデックス付き配列と連想配列

PHP は 2 種類の配列をサポートしています。1 つは「値」(値) のみを保存するインデックス付き配列、もう 1 つは「名前と値のペア」を保存するインデックス付き配列です。 (名前 / 値) 連想配列。

JavaScriptは連想配列をサポートしていないため、json_encode()はインデックス付き配列のみを配列形式に変換し、連想配列をオブジェクト形式に変換します。

たとえば、今はインデックス付き配列

<ol class="dp-c">
<li class="alt"><span><span class="vars">$arr</span><span> = Array(</span><span class="string">'one'</span><span>, </span><span class="string">'two'</span><span>, </span><span class="string">'three'</span><span>);  </span></span></li>
<li>
<span class="func">echo</span><span> json_encode(</span><span class="vars">$arr</span><span>); </span>
</li>
</ol>
ログイン後にコピー
があります

結果は次のようになります:

<ol class="dp-c"><li class="alt"><span><span>[</span><span class="string">"one"</span><span>,</span><span class="string">"two"</span><span>,</span><span class="string">"three"</span><span>]  </span></span></li></ol>
ログイン後にコピー

これを連想配列に変更すると:

<ol class="dp-c">
<li class="alt"><span><span class="vars">$arr</span><span> = Array(</span><span class="string">'1'</span><span>=></span><span class="string">'one'</span><span>, </span><span class="string">'2'</span><span>=></span><span class="string">'two'</span><span>, </span><span class="string">'3'</span><span>=></span><span class="string">'three'</span><span>);  </span></span></li>
<li>
<span class="func">echo</span><span> json_encode(</span><span class="vars">$arr</span><span>); </span>
</li>
</ol>
ログイン後にコピー

結果は変わります:

<ol class="dp-c"><li class="alt"><span><span>{</span><span class="string">"1"</span><span>:</span><span class="string">"one"</span><span>,</span><span class="string">"2"</span><span>:</span><span class="string">"two"</span><span>,</span><span class="string">"3"</span><span>:</span><span class="string">"three"</span><span>}  </span></span></li></ol>
ログイン後にコピー

データ形式が "[] から変わることに注意してください" (配列) が "{}" (オブジェクト) になりました。

「インデックス配列」を「オブジェクト」に強制する必要がある場合は、次のように記述できます

<ol class="dp-c"><li class="alt"><span><span>json_encode( (object)</span><span class="vars">$arr</span><span> ); </span></span></li></ol>
ログイン後にコピー

または

<ol class="dp-c"><li class="alt"><span><span>json_encode ( </span><span class="vars">$arr</span><span>, JSON_FORCE_OBJECT ); </span></span></li></ol>
ログイン後にコピー

3. クラスの変換

以下は PHP クラスです:

<ol class="dp-c">
<li class="alt"><span><span class="keyword">class</span><span> Foo {  </span></span></li>
<li>
<span class="keyword">const</span><span> ERROR_CODE = </span><span class="string">'404'</span><span>;  </span>
</li>
<li class="alt">
<span class="keyword">public</span><span> </span><span class="vars">$public_ex</span><span> = </span><span class="string">'this is public'</span><span>;  </span>
</li>
<li>
<span class="keyword">private</span><span> </span><span class="vars">$private_ex</span><span> = </span><span class="string">'this is private!'</span><span>;  </span>
</li>
<li class="alt">
<span class="keyword">protected</span><span> </span><span class="vars">$protected_ex</span><span> = </span><span class="string">'this should be protected'</span><span>;   </span>
</li>
<li>
<span class="keyword">public</span><span> </span><span class="keyword">function</span><span> getErrorCode() {  </span>
</li>
<li class="alt">
<span class="keyword">return</span><span> self::ERROR_CODE;  </span>
</li>
<li><span>}  </span></li>
<li class="alt"><span>} </span></li>
</ol>
ログイン後にコピー

さて、実行しますこのクラスのインスタンスの json 変換:

<ol class="dp-c">
<li class="alt"><span><span class="vars">$foo</span><span> = </span><span class="keyword">new</span><span> Foo;  </span></span></li>
<li>
<span class="vars">$foo_json</span><span> = json_encode(</span><span class="vars">$foo</span><span>);  </span>
</li>
<li class="alt">
<span class="func">echo</span><span> </span><span class="vars">$foo_json</span><span>; </span>
</li>
</ol>
ログイン後にコピー

出力結果は

<ol class="dp-c"><li class="alt"><span><span>{</span><span class="string">"public_ex"</span><span>:</span><span class="string">"this is public"</span><span>}  </span></span></li></ol>
ログイン後にコピー

パブリック変数 (public) を除いて、他のもの (定数、プライベート変数、メソッドなど) が失われていることがわかります。

4. json_decode()

この関数は、json テキストを対応する PHP データ構造に変換するために使用されます。以下に例を示します:

<ol class="dp-c">
<li class="alt"><span><span class="vars">$json</span><span> = </span><span class="string">'{"foo": 12345}'</span><span>;  </span></span></li>
<li>
<span class="vars">$obj</span><span> = json_decode(</span><span class="vars">$json</span><span>);  </span>
</li>
<li class="alt">
<span>print </span><span class="vars">$obj</span><span>->{</span><span class="string">'foo'</span><span>}; </span><span class="comment">// 12345</span><span> </span>
</li>
</ol>
ログイン後にコピー

通常、json_decode() は常に配列ではなく PHP オブジェクトを返します。例:

<ol class="dp-c">
<li class="alt"><span><span class="vars">$json</span><span> = </span><span class="string">'{"a":1,"b":2,"c":3,"d":4,"e":5}'</span><span>;  </span></span></li>
<li>
<span>var_dump(json_decode(</span><span class="vars">$json</span><span>)); </span>
</li>
</ol>
ログイン後にコピー

結果は PHP オブジェクトを生成します:

<ol class="dp-c">
<li class="alt"><span><span>object(stdClass)#1 (5) {  </span></span></li>
<li>
<span>[</span><span class="string">"a"</span><span>] => int(1)  </span>
</li>
<li class="alt">
<span>[</span><span class="string">"b"</span><span>] => int(2)  </span>
</li>
<li>
<span>[</span><span class="string">"c"</span><span>] => int(3)  </span>
</li>
<li class="alt">
<span>[</span><span class="string">"d"</span><span>] => int(4)  </span>
</li>
<li>
<span>[</span><span class="string">"e"</span><span>] => int(5)  </span>
</li>
<li class="alt"><span>} </span></li>
</ol>
ログイン後にコピー

PHP 連想配列の生成を強制したい場合は、json_decode() はパラメーター true:

<ol class="dp-c">
<li class="alt"><span><span class="vars">$json</span><span> = </span><span class="string">'{"a":1,"b":2,"c":3,"d":4,"e":5}'</span><span>;  </span></span></li>
<li>
<span>var_dump(json_decode(</span><span class="vars">$json</span><span>),true); </span>
</li>
</ol>
ログイン後にコピー

を追加する必要があります:

<ol class="dp-c">
<li class="alt"><span><span class="keyword">array</span><span>(5) {  </span></span></li>
<li>
<span>[</span><span class="string">"a"</span><span>] => int(1)  </span>
</li>
<li class="alt">
<span>[</span><span class="string">"b"</span><span>] => int(2)  </span>
</li>
<li>
<span>[</span><span class="string">"c"</span><span>] => int(3)  </span>
</li>
<li class="alt">
<span>[</span><span class="string">"d"</span><span>] => int(4)  </span>
</li>
<li>
<span>[</span><span class="string">"e"</span><span>] => int(5)  </span>
</li>
<li class="alt"><span>} </span></li>
</ol>
ログイン後にコピー

結果は連想配列を生成しますarray:

<ol class="dp-c">
<li class="alt"><span><span class="vars">$bad_json</span><span> = </span><span class="string">"{ 'bar': 'baz' }"</span><span>;  </span></span></li>
<li>
<span class="vars">$bad_json</span><span> = </span><span class="string">'{ bar: "baz" }'</span><span>;  </span>
</li>
<li class="alt">
<span class="vars">$bad_json</span><span> = </span><span class="string">'{ "bar": "baz", }'</span><span>; </span>
</li>
</ol>
ログイン後にコピー

5. json_decode() のよくあるエラー

以下の 3 つの json の記述方法は、どこが間違っているかわかりますか?

<ol class="dp-c"><li class="alt"><span><span>var_dump(json_decode(</span><span class="string">"Hello World"</span><span>)); </span><span class="comment">//null</span><span> </span></span></li></ol>
ログイン後にコピー

これら 3 つの文字列に対して json_decode() を実行すると、null が返され、エラーが報告されます。

最初のエラーは、JSON 区切り文字では単一引用符ではなく二重引用符の使用のみが許可されていることです。 2 番目の間違いは、JSON の名前と値のペアの「名前」 (コロンの左側の部分) では、いかなる場合でも二重引用符を使用する必要があることです。 3 番目のエラーは、最後の値の後にカンマを追加できないことです。

さらに、json はオブジェクトと配列を表すためにのみ使用できます。json_decode() が文字列または値に対して使用された場合は、null が返されます。 rrreee

6. 参考資料

* PHP マニュアル (http://php.net/manual/en/book.json.php)

* Ed Finkler、JSON はみんなの友達 (http://phpadvent. org/2008/json-is-everybodys-friend-by-ed-finkler)

元のアドレス: http://www.ruanyifeng.com/blog/2011/01/json_in_php.html


http://www.bkjia.com/PHPjc/445805.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445805.html技術記事
現在、JSON は最も一般的なデータ交換形式の 1 つとなっており、主要な Web サイトのほぼすべての API が JSON をサポートしています。 その設計思想について説明するために、「データ型と JSON 形式」という記事を書きました。 ...
🎜🎜
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

See all articles