原文:
http://www.ruanyifeng.com/blog/2011/01/json_in_php.html
------------------------------------------------- ------------------------
日付: 2011年1月14日
現在、JSON は最も人気のあるデータ交換形式の 1 つとなっており、主要な Web サイトのほぼすべての API が JSON をサポートしています。
その設計アイデアについて説明するために、「データ型と JSON 形式」という記事を書きました。今日は、インターネット アプリケーション (特に API の作成) を開発するために知っておく必要がある、PHP 言語のサポートについてまとめたいと思います。
バージョン 5.2 以降、PHP は json_encode() 関数と json_decode() 関数をネイティブに提供し、前者はエンコードに使用され、後者はデコードに使用されます。
1. json_encode()
この関数は主に配列とオブジェクトを json 形式に変換するために使用されます。まずは配列変換の例を見てみましょう:
リーリー結果は
リーリーオブジェクト変換の別の例を見てください:
リーリー結果は
リーリーjson は utf-8 でエンコードされた文字のみを受け入れるため、 json_encode() のパラメーターは utf-8 でエンコードされている必要があります。そうしないと、空の文字または null が返されます。中国語で GB2312 エンコードを使用する場合、または外国語で ISO-8859-1 エンコードを使用する場合は、この点に特別な注意を払う必要があります。
2. インデックス配列と連想配列
PHP は 2 種類の配列をサポートしています。1 つは「値」(値) のみを格納するインデックス付き配列、もう 1 つは「名前と値のペア」(名前/値) を格納する連想配列です。
JavaScript は連想配列をサポートしていないため、json_encode() はインデックス付き配列のみを配列形式に変換し、連想配列をオブジェクト形式に変換します。
たとえば、インデックス配列があります
リーリー結果は次のとおりです:
リーリー連想配列に変更する場合:
リーリー結果が変わりました:
リーリーデータ形式が「[]」(配列)から「{}」(オブジェクト)に変更されていることに注意してください。
「インデックス配列」を「オブジェクト」に強制的に入れる必要がある場合は、次のように書くことができます
リーリーまたは
リーリー3. クラス変換
以下は PHP クラスです:
リーリー次に、このクラスのインスタンスで json 変換を実行します。
リーリー出力結果は
リーリーパブリック変数 (public) を除いて、他のもの (定数、プライベート変数、メソッドなど) が欠落していることがわかります。
4. json_decode()
この関数は、json テキストを対応する PHP データ構造に変換するために使用されます。以下に例を示します:
リーリー通常、json_decode() は配列ではなく常に PHP オブジェクトを返します。例:
リーリーその結果、PHP オブジェクトが生成されます:
リーリーPHP 連想配列の生成を強制したい場合は、json_decode() にパラメータ true を追加する必要があります:
リーリー結果は連想配列になります:
リーリー5. json_decode() の一般的なエラー
次の 3 つの json の記述方法はすべて間違っています。どこにエラーがあるかわかりますか?
リーリーこれら 3 つの文字列に対して json_decode() を実行すると、null が返され、エラーが報告されます。
最初のエラーは、JSON 区切り文字 (区切り文字) では単一引用符ではなく二重引用符の使用のみが許可されていることです。 2 番目の間違いは、JSON の名前と値のペアの「名前」 (コロンの左側の部分) では、いかなる場合でも二重引用符を使用する必要があることです。 3 番目のエラーは、最後の値の後にカンマを追加できないことです。
さらに、json はオブジェクトと配列を表すためにのみ使用できます。json_decode() が文字列または値に対して使用された場合は、null が返されます。
6.参考資料
[1] PHPマニュアル
[2] エド・フィンクラー、JSON はみんなの友達です