1. json_encode()
この関数は主に配列とオブジェクトを json 形式に変換するために使用されます。まずは配列変換の例を見てみましょう:
- $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
- echo json_encode($arr);
コードをコピー
結果は
- {"a":1,"b":2,"c":3,"d":4,"e":5}
コードをコピー
オブジェクト変換の別の例を見てみましょう:
- $obj->body = '別の投稿';
- $obj->id = 21;
- $obj->approved = true >status = NULL;
- echo json_encode($obj);
-
-
コードをコピー
結果は
{"body":"別の投稿", "id":21, -
- コードをコピー
-
-
-
json は utf-8 でエンコードされた文字のみを受け入れるため、 json_encode() のパラメーターは utf-8 でエンコードされている必要があります。そうしないと、空の文字または null が返されます。中国語で GB2312 エンコードを使用する場合、または外国語で ISO-8859-1 エンコードを使用する場合は、この点に特別な注意を払う必要があります。
2. インデックス配列と連想配列
PHP は 2 種類の配列をサポートしています。1 つは「値」(値) のみを格納するインデックス付き配列、もう 1 つは「名前と値のペア」(名前/値) を格納する連想配列です。
JavaScript は連想配列をサポートしていないため、json_encode() はインデックス付き配列のみを配列形式に変換し、連想配列をオブジェクト形式に変換します。
たとえば、インデックス配列があります
$arr = Array('one', 'two', 'three'); echo json_encode($arr);
[「one」、「two」、「three」]
コードをコピー
$arr = Array('1'=>'one', '2'=>'two', '3'=>'three'); echo json_encode($arr); コードをコピー
{"1":"one","2":"two","3":"three"}
コードをコピー
データ形式が「[]」(配列)から「{}」(オブジェクト)に変更されていることに注意してください。
- 「インデックス配列」を「オブジェクト」に強制的に入れる必要がある場合は、次のように書くことができます
json_encode( (object)$arr );
コードをコピー
json_encode ( $arr, JSON_FORCE_OBJECT )
コードをコピー
class Foo { const ERROR_CODE = '404'; public $public_ex = 'これはプライベートです!' public function getErrorCode() { return self::ERROR_CODE; } } コードをコピー-
-
次に、このクラスのインスタンスで json 変換を実行します。
- $foo = new Foo;
- $foo_json = json_encode($foo);
- echo $foo_json;
出力は
{"public_ex":"これはパブリックです"}
コードをコピー
パブリック変数 (public) を除いて、他のもの (定数、プライベート変数、メソッドなど) が欠落していることがわかります。
4. json_decode()
この関数は、json テキストを対応する PHP データ構造に変換するために使用されます。以下に例を示します:
$json = '{"foo": 12345}'; - $obj = json_decode($json);
-
- 通常、json_decode() は常に配列ではなく PHP オブジェクトを返します。例:
-
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json) );
object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int; ) ["d"] => int(4) ["e"] => int(5) }
コードをコピーします
-
- PHP 連想配列の生成を強制したい場合は、 json_decode() にパラメータ true を追加する必要があります:
-
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json, true));
array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d" ] => int(4) ["e"] => int(5) }
コードをコピーします
-
-
- 5. json_decode() の一般的なエラー
次の 3 つの json の記述方法はすべて間違っています。どこにエラーがあるかわかりますか?
$bad_json = "{ 'bar': 'baz' }"; $bad_json = '{ bar: "baz" }'; コードをコピーします
これら 3 つの文字列に対して json_decode() を実行すると、null が返され、エラーが報告されます。
最初の間違いは、JSON の区切り文字では単一引用符ではなく二重引用符の使用のみが許可されていることです。 2 番目の間違いは、JSON の名前と値のペアの「名前」(コロンの左側の部分) は、いかなる状況でも二重引用符で囲む必要があることです。 3 番目のエラーは、最後の値の後にカンマを追加できないことです。 -
- さらに、json はオブジェクトと配列を表すためにのみ使用できます。json_decode() が文字列または値に対して使用された場合、null が返されます。
-
var_dump(json_decode("Hello World")) //null
コードをコピー
|