Web 開発では、処理のためにオブジェクト配列をフロントエンドに送信する必要があることが多く、このデータは通常、json 形式で送信する必要があります。 util の多くの言語はオブジェクトを json 形式に変換するツールを提供しており、php も例外ではありません。この記事ではphpでオブジェクト配列をjson形式に変換する方法を詳しく紹介します。
1. json_encode() 関数の使用
PHP には、オブジェクト配列を json 形式に変換するための json_encode() 関数が用意されています。この関数の使用方法は次のとおりです。
サンプルコード:
<?php $person = array( 'name' => 'jack', 'age' => 18, 'city' => 'beijing' ); echo json_encode($person); ?>
出力結果:
{"name":"jack","age":18,"city":"beijing"}
ご覧のとおり、json_encode() 関数の機能は次のとおりです。配列またはオブジェクトを json 形式の String に変換します。この例では、$person オブジェクトを定義し、json_encode() 関数を使用して $person オブジェクトを json 形式の文字列に変換して出力します。
2. パラメーターを指定した json_encode() 関数の使用
json_encode() 関数は、オブジェクト配列を json 形式の文字列に変換するだけでなく、4 つのパラメーターも受け入れることができます。
$a. $value パラメータ
$value パラメータは、変換する必要があるオブジェクト (または配列) を渡すために使用されます。 $value パラメータには、リソース タイプを除く任意の PHP タイプを指定できます。具体的な使用法では、ネストされた配列または最もネストされた配列またはオブジェクトに、複数のキーと値のペア、ネスト、配列、またはオブジェクトを含めることができることがわかります。この状況が発生した場合は、この構文を使用して新しい配列またはオブジェクトを構築できます。
サンプル コード:
<?php //嵌套数组和对象的例子 $person = array( 'name' => 'jack', 'age' => 18, 'city' => 'beijing', 'hobby' => array( 'reading', 'music', 'sports', 'travel' ), 'friends' => array( array( 'name' => 'tom', 'phone' => '13812999010' ), array( 'name' => 'lily', 'phone' => '13812999020' ) ) ); //使用json_encode()的方式将$person数组转换为json格式字符串 echo json_encode($person); ?>
出力結果:
{"name":"jack","age":18,"city":"beijing","hobby":["reading","music","sports","travel"],"friends":[{"name":"tom","phone":"13812999010"},{"name":"lily","phone":"13812999020"}]}
ご覧のとおり、 json_encode() 関数はネストされた配列とオブジェクトをサポートしており、より複雑なデータに役立ちます。この言語は非常に便利で実用的です。
$b. $options パラメータ
$options パラメータは、オブジェクトと配列の変換方法を指定するために使用されます。たとえば、出力 json 文字列で UTF-8 エンコードを無効にする場合は、JSON_UNESCAPED_UNICODE オプションを使用できます。このオプションを使用すると、出力内の英語以外の文字がすべて元の表現で表示されます。
サンプルコード:
<?php $person = array( 'name' => 'jack', 'age' => 18, 'city' => 'beijing' ); echo json_encode($person, JSON_UNESCAPED_UNICODE); ?>
出力結果:
{"name":"jack","age":18,"city":"beijing"}
$c. $ Depth パラメータ
$ Depth パラメータは、オブジェクトまたは配列を指定するために使用されます。 json 文字列の前の最大深度に変換されます。このパラメータは 0 より大きい場合に有効ですが、それ以外の場合は無効です。データの深さが指定された深さを超える場合、json_encode() 関数は FALSE を返します。デフォルトでは、$ Depth パラメータは 512 です。
サンプル コード:
<?php $person = array( 'name' => 'jack', 'age' => 18, 'city' => 'beijing', 'hobby' => array( 'reading', 'music', 'sports', 'travel' ), 'friends' => array( array( 'name' => 'tom', 'phone' => '13812999010' ), array( 'name' => 'lily', 'phone' => '13812999020' ) ) ); echo json_encode($person, JSON_PRETTY_PRINT, 3); ?>
出力結果:
{ "name": "jack", "age": 18, "city": "beijing", "hobby": [ "reading", "music", "sports", "travel" ], "friends": [ { "name": "tom", "phone": "13812999010" }, { "name": "lily", "phone": "13812999020" } ] }
JSON_PRETTY_PRINT パラメーターと $ Depth パラメーターを使用すると、出力される json 文字列がフォーマットされ、オブジェクト全体がインデントされる。
$d. $reserved パラメータ
$reserved パラメータは、オブジェクトまたは配列内のメンバー名が PHP の予約語と競合する場合に実行されるアクションを指定します。デフォルトのアクションはアンダースコアを追加することです。このパラメータは、JSON_FORCE_OBJECT がオプションとして使用される場合にのみ有効です。
3. 例外処理
JSON エンコードに json_encode() 関数を使用する場合、特別な処理が必要な例外が発生する可能性があり、そうでないと json_encode() 関数が正しく動作しません。
$a. エンコードの問題
ISO-8859-1 でエンコードされた非 Unicode 文字列を $person の name キーに埋め込みたい場合、json_encode() は失敗します。ただし、該当する文字列を Unicode に変換すると、正常にエンコードされます。
サンプルコード:
<?php $data = array( "name" => "Manfred", "age" => "31", "city" => "车里雅宾斯克", "UTF8" => "こんにちは" ); foreach ($data as $key => $value) { if (!mb_detect_encoding($value, 'utf-8', true)) { $data[$key] = mb_convert_encoding($value, 'UTF-8', 'ISO-8859-1'); } } echo json_encode($data); ?>
出力結果:
{"name":"Manfred","age":"31","city":"\u8f66\u91cc\u96c6\u5bbe\u65af\u514b","UTF8":"こんにちは"}
ご覧のとおり、ISO-8859-1 文字列を UTF-8 文字列に変換した後、 json_encode( )関数はオブジェクトを JSON 形式に正常に変換しました。
$b. UTF-8 BOM ヘッダーの問題
UTF-8 BOM ヘッダーでエンコードされた文字列をオブジェクト配列に含めると、json_encode() 関数が機能しません。したがって、BOM ヘッダーのエンコードを含むプログラムを作成する場合は、json_encode() 関数の使用時に問題が発生しないように、BOM ヘッダーを手動で削除する必要があります。
c. マルチバイト配列の問題
json_encode() 関数は正しい UTF-8 文字列のみを受け入れ、他のマルチバイト エンコード スキームは受け入れません。オブジェクト配列にこれらのエンコード スキームが含まれている場合は、mb_convert_encoding() 関数を使用して、それらを UTF-8 文字列に変換する必要があります。
サンプルコード:
<?php $array = ['你好', 'こんにちは', 'Привет']; $json = json_encode($array); echo $json; // Error: Malformed UTF-8 characters, possibly incorrectly encoded
出力結果:
Error: Malformed UTF-8 characters, possibly incorrectly encoded
ここでは、マルチバイト配列を json 文字列に変換することによって例外が発生していることがわかります。 pass この問題を解決するには、mb_convert_encoding() を使用します。
サンプルコード:
<?php $array = ['你好', 'こんにちは', 'Привет']; $json = json_encode(array_map(function ($str) { return mb_convert_encoding($str, 'UTF-8', 'UTF-8'); }, $array)); echo $json; ?>
出力結果:
["你好","こんにちは","Привет"]
要するに、 json_encode() はオブジェクト配列を json 形式の文字列に変換するのに役立つ非常に便利な関数です。 。この機能をより効果的に使用するには、使用中に一般的な問題の解決策を明確に理解する必要があります。
以上がPHPでオブジェクト配列をJSON形式に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。