JSONとPHPのメモ : JavaScript

Pocket

JSONとPHPについて覚書を記載しています。

JSON(ジェイソン、JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptにおけるオブジェクトの表記法をベースとしているが、JSONはJavaScript専用のデータ形式では決してなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しに使えるよう設計されている。

JSONテキストはUnicodeでエンコードするとされている (SHALL)。デフォルトのエンコーディングはUTF-8である。

JavaScript Object Notation – Wikipedia

JSONのデータ型

型は文字、数値、論理値、配列、オブエクト,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のエスケープシーケンス

JSONのエスケープシーケンスはPHPのダブルクォート文字列のエスケープと共通のものもありますが違いもあります。
大きな違いは/もエスケープします(\/)。

エスケープシーケンス 意味
\” ダブルクォート
\/ スラッシュ
\\ バックスラッシュ
\b バックスペース
\f フォームフィード
\n 改行
\r キャリッジリターン
\t タブ
\uXXXX ユニコード

PHPオブジェクトとJSON文字列の変換

PHPのビルトインクラスstdClassとJSON文字列は相互に変換できます。
ユーザー定義クラスもJSON文字列に変換できます。そのときprivate, protectedのプロパティは変換されません。

関数 内容
json_encode JSON文字列を返します。第1パラメータはすべての文字列データは、UTF-8 エンコードされたいなければいけません。PHP公式マニュアル
json_decode JSON文字列を引数にとりstdClassのインスタンスを返します。第2引数へtrueを指定すると連想配列を返します。

stdClassインスタンスからJSON文字列へ変換

$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"]}'

JSON文字列からstdClassへ変換

$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.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。