JSONオブジェクト to シリアライズ済みPHPオブジェクト コンバーター
多機能なPHPシリアライザー/デシリアライザーを使って、PHPでデータを簡単にシリアライズおよびデシリアライズできます。このオンラインツールは、複雑なデータ構造を保存可能な文字列に変換し、元の形式に戻したい開発者に最適です。ソフトウェアをインストールすることなく、正確かつ効率的にデータを処理できます。使いやすく信頼性の高いこのツールで、PHP開発のワークフローを改善しましょう。
PHP Serializerの機能
PHP SerializerはJSONをPHPのserialize()の文字列形式に変換し、シリアライズされた文字列を整形済みのJSONに戻します。シリアライズ形式の文字列長はバイト数で数えるため、アクセント付き文字を含む値は文字数よりも大きな長さになります。
シリアライズ解除で、ユーザー定義クラスのオブジェクトが生成されることはありません。オブジェクトはクラス名を保持した__PHP_Incomplete_Classとして戻り、そのクラス名は__PHP_Incomplete_Class_Nameに格納されます。これにより、信頼できない入力からコードが実行されるのを防ぎます。JSONオブジェクトは、キーが文字列のPHP配列になります。
解説付きの例
JSONをシリアライズ文字列に変換
a:4は4つの要素を持つ配列で、各文字列にはバイト数で長さが記録されています。
- 入力
{"name": "Ada", "age": 36, "admin": true, "tags": ["php", "json"]}- 結果
a:4:{s:4:"name";s:3:"Ada";s:3:"age";i:36;s:5:"admin";b:1;s:4:"tags";a:2:{i:0;s:3:"php";i:1;s:4:"json";}}
シリアライズ文字列をJSONに変換
Zürichは6文字ですが、UTF-8では7バイトです。そのため、長さはs:7です。
- 入力
a:2:{s:4:"city";s:7:"Zürich";s:3:"zip";s:4:"8001";}- 結果
{ "city": "Zürich", "zip": "8001" }
シリアライズされたオブジェクト
オブジェクトは本物のstdClassインスタンスとして再構築されません。クラス名とプロパティはデータとして表示されます。
- 入力
O:8:"stdClass":1:{s:2:"id";i:7;}- 結果
{ "__PHP_Incomplete_Class_Name": "stdClass", "id": 7 }
シリアライズ形式の型コード
| コード | タイプ | 例 |
|---|---|---|
N | null値 | N; |
b | ブール値。trueは1、falseは0 | b:1; |
i | 整数 | i:36; |
d | 浮動小数点数 | d:0.5; |
s | 文字列。長さはバイト数 | s:3:"PHP"; |
a | 配列。要素数とキー・値のペアを含む | a:1:{i:0;s:1:"x";} |
O | オブジェクト。クラス名の長さ、クラス名、プロパティ数を含む | O:8:"stdClass":0:{} |
よくある質問
PHP でデータをシリアライズするには?
PHPでデータをシリアライズするには、配列、オブジェクト、スカラー値などのデータ構造を入力欄に入力し、「シリアライズ」ボタンをクリックします。このツールはPHPのシリアライズプロトコルを使用して複雑なデータ構造を保存可能な文字列形式に変換するため、ファイルやデータベースへの保存、ネットワーク経由での送信が可能になります。
PHPでデータをデシリアライズするには?
PHPでデータをデシリアライズするには、通常a:、s:、O:などの形式識別子で始まるシリアライズ済み文字列を入力欄に入力し、「デシリアライズ」ボタンをクリックします。このツールは文字列を元のデータ構造に戻し、配列、オブジェクト、値をシリアライズ前と同じ状態に復元します。
なぜシリアライズは PHP で有用なのでしょうか?
シリアライズは複雑なデータ構造を保存可能な文字列に変換します。これにより、ファイルやデータベースへの永続保存、ネットワーク経由のデータ送信、セッションデータの保存、キャッシュ、メッセージキューのペイロード、リクエスト間でのオブジェクト状態の保持が可能になります。デシリアライズすると、元のデータを取り出して引き続き使用できます。
PHP でシリアライズできるデータ型は?
PHPは文字列、整数、浮動小数点数、真偽値、配列、オブジェクト、NULL値をシリアライズします。配列のキー、オブジェクトのプロパティ(public、protected、private)、入れ子構造、データ型も保持します。ただし、データベース接続やファイルハンドルなどのリソースはシリアライズできず、別途処理が必要です。
データをデシリアライズする際に、セキュリティ上の注意点はありますか?
はい。信頼できないデータをデシリアライズすると、PHPオブジェクトインジェクション攻撃が発生する可能性があります。攻撃者は、マジックメソッド(__wakeup、__destruct)を通じてコード実行を引き起こす悪意あるシリアライズ済み文字列を作成できます。検証せずにユーザー入力や外部データをunserializeしないでください。信頼できないデータにはJSONを使用するか、allowed_classes制限を設定してください。
カスタム・オブジェクトのシリアライズとデシリアライズはできますか?
はい。PHPはカスタムオブジェクトをシリアライズし、すべてのプロパティと値を保持します。ただし、オブジェクトを正しく復元するには、デシリアライズ前にクラス定義を読み込んでおく必要があります。オートロードやクラスファイルの読み込みを利用するか、__sleep()と__wakeup()のマジックメソッドを実装して、独自のシリアライズ処理を定義してください。
serialize()とJSONの違いは何ですか?
PHP serialize()はデータ型、private/protectedプロパティ、オブジェクトのクラス情報を正確に保持しますが、PHPでのみ使用できます。JSONは言語に依存せず、読みやすくウェブに適しており、あらゆる言語で使えますが、privateプロパティと正確なPHP型は保持されません。PHPのみでの保存にはserialize()を、APIや相互運用にはJSONを使用してください。
セッションデータのシリアライズ方法を教えてください
PHPはセッションデータ($_SESSION)を自動的にシリアライズし、リクエスト間で保存します。セッションに配列やオブジェクトを保存すると、PHPがそれらをファイルまたはデータベースにシリアライズし、次回以降のページ読み込み時にデシリアライズします。これにより、ページを移動してもユーザー状態、ショッピングカート、認証情報を維持できます。
シリアライズされたデータをデータベースに格納できますか?
はい。シリアライズ済みデータは、データベースのTEXTまたはBLOB列に保存できます。ただし、シリアライズ済みデータは効率的なクエリ、インデックス作成、検索を妨げます。オブジェクト全体をひとまとまりで保存する場合はシリアライズを使い、個々のフィールドを検索したりデータ間の関係を管理したりする場合はJSONまたは正規化テーブルを使用してください。
シリアライズされたPHPデータはどのように見えるのでしょうか?
シリアライズ済みデータには形式を示す接頭辞があります。s:5:"hello"(文字列)、i:42(整数)、a:2:{...}(配列)、O:4:"User"(オブジェクト)のような形式です。数値は長さまたは要素数を示します。この形式はコンパクトですが、人間には読みにくいものです。デバッグやデータ操作には、このツールで読みやすいJSONとPHPのシリアライズ形式を相互変換できます。
シリアライズされたデータをデバッグするには?
データをデシリアライズしてその構造を検査し、デシリアライズされた値に対してprint_r()やvar_dump()を使用し、可読性のためにJSONに変換し、不完全なシリアライズや破損をチェックし、オブジェクトのクラスの可用性を検証し、複雑なシリアライズされた構造を視覚化して理解するために我々のツールを使用する。
クロージャや無名関数をシリアライズできますか?
標準のPHPシリアライゼーションはクロージャをサポートしていません。この機能を使用するには、Opis ClosureやLaravelのSerializableClosureのようなパッケージを使用します。オブジェクト内の通常の関数やメソッドは、クラスで定義されていればシリアライズできますが、無名関数は特別な処理が必要です。
シリアライズのマジックメソッドとは?
__sleep()はシリアライズ前に実行され、シリアライズするプロパティの配列を返します(特定のデータを除外するのに便利です)。__wakeup()はデシリアライズ後に実行され、初期化を行います。__serialize()と__unserialize()(PHP 7.4以降)を使うと、さらに細かく制御できます。クラス独自のシリアライズ処理を実装する際に利用してください。
シリアライズされたデータをJSONに移行するには?
既存のPHPデータをデシリアライズし、配列またはstdClassオブジェクトに変換してから、JSONでエンコードします。コードを更新し、serialize()/unserialize()の代わりにjson_encode()/json_decode()を使用してください。JSONはより安全で読みやすく、互換性も高い一方、シリアライズで保持されるprivateプロパティと正確な型情報は失われます。