JSONとPHPについて覚書を記載しています。
JSON(ジェイソン、JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptにおけるオブジェクトの表記法をベースとしているが、JSONはJavaScript専用のデータ形式では決してなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しに使えるよう設計されている。
JSONテキストはUnicodeでエンコードするとされている (SHALL)。デフォルトのエンコーディングはUTF-8である。
JavaScript Object Notation – Wikipedia
型は文字、数値、論理値、配列、オブエクト,nullです。
JSONの型 | 内容 |
---|---|
文字 | 文字はダブルクォート文字列です。シングルクォート文字列はありません。 |
数値 | 指数表現なども可能です。 |
論理値 | true/false 小文字です。 |
配列 | [”a”,”b”] |
JSON オブジェクト | {“a”:”あ”, “b”:”い”} JSON Objectです。プロパティは必ずダブルクォートで囲む必要があります。 |
null | 小文字です。 |
以下は正しいJSONの例です。
{
"string": "Hello JSON!",
"number": 123e+5,
"boolean": true,
"array": ["a", "b"],
"obj": {
"a": "あ",
"b": "い"
},
"null": null
}
以下は正しくない例です。
{
"string": "Hello JSON!",
"number": 123e+5,
"boolean": TURE, /* 大文字は使用できません。 */
"array": ["a", "b"],
"obj": {
a: "あ", /* プロパティがダブルクォートで囲まれていません。JavaScriptのオブジェクトとしては正しいですがJSONのオブジェクトとしてはエラーです。 */
b: "い"
},
"null": NULL /* 大文字は使用できません。 */
}
json_decodeで正しいJOSN文字列をPHPオブジェクトへ変換した例
object(stdClass)[1]
public 'string' => string 'Hello JSON!' (length=11)
public 'number' => float 12300000
public 'boolean' => boolean true
public 'array' =>
array (size=2)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
public 'obj' =>
object(stdClass)[2]
public 'a' => string 'あ' (length=3)
public 'b' => string 'い' (length=3)
public 'null' => null
JSONのエスケープシーケンスはPHPのダブルクォート文字列のエスケープと共通のものもありますが違いもあります。
大きな違いは/もエスケープします(\/)。
エスケープシーケンス | 意味 |
---|---|
\” | ダブルクォート |
\/ | スラッシュ |
\\ | バックスラッシュ |
\b | バックスペース |
\f | フォームフィード |
\n | 改行 |
\r | キャリッジリターン |
\t | タブ |
\uXXXX | ユニコード |
PHPのビルトインクラスstdClassとJSON文字列は相互に変換できます。
ユーザー定義クラスもJSON文字列に変換できます。そのときprivate, protectedのプロパティは変換されません。
関数 | 内容 |
---|---|
json_encode | JSON文字列を返します。第1パラメータはすべての文字列データは、UTF-8 エンコードされたいなければいけません。PHP公式マニュアル |
json_decode | JSON文字列を引数にとりstdClassのインスタンスを返します。第2引数へtrueを指定すると連想配列を返します。 |
$obj = new stdClass();
$obj->firstName = "Taro";
$obj->lastName = "Yamada";
$obj->age = 40;
$obj->marriage = TRUE;
$obj->skill = ["Programming", "Design" ];
$json = json_encode($obj);
var_dump($json);
// 文字列
// '{"firstName":"Taro","lastName":"Yamada","age":40,"marriage":true,"skill":["Programing","Design"]}'
$obj = json_decode('{"firstName":"Taro","lastName":"Yamada","age":40,"marriage":true,"skill":["Programing","Design"]}');
var_dump($obj);
/**
object(stdClass)[2]
public 'firstName' => string 'Taro' (length=4)
public 'lastName' => string 'Yamada' (length=6)
public 'age' => int 40
public 'marriage' => boolean true
public 'skill' =>
array (size=2)
0 => string 'Programing' (length=10)
1 => string 'Design' (length=6)
*/
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。