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

WBOY
リリース: 2016-07-20 10:57:00
オリジナル
845 人が閲覧しました

現在、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 形式」という記事を書きました。 ...
🎜🎜
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!