PHP で json_encode() を使用して配列を JSON 文字列に変換すると、どのように操作しても、変換された JSON 文字列が空になるという問題が発生することがあります。この問題はイライラするかもしれませんが、解決策は簡単です。
問題の特定
まず、問題を見つける必要があります。 var_dump() 関数を使用して配列の内容を表示し、例外や予期したデータがあるかどうかを確認できます。
例:
<?php $arr = array("name" => "John", "age" => 30, "city" => "New York"); var_dump($arr); echo json_encode($arr); ?>
このコードは次を出力します:
array(3) { ["name"]=> string(4) "John" ["age"]=> int(30) ["city"]=> string(8) "New York" }
次に、 json_encode() を使用して配列を JSON 文字列に変換します。結果として、空の文字列が得られます。この結果は私たちを驚かせ、私たち自身のスキルレベルに疑問を抱かせました。
トラブルシューティング
次に、問題を段階的にトラブルシューティングしてみましょう。
PHP の json_encode() 関数では、入力データが UTF-8 エンコードされている必要があります。配列内に UTF-8 以外でエンコードされた文字が含まれている場合、JSON 文字列への変換は失敗します。
iconv() 関数または mb_convert_encoding() 関数を使用して、配列内の文字列を UTF-8 エンコーディングに変換できます。例:
<?php $arr = array("name" => "John", "age" => 30, "city" => "New York"); foreach($arr as &$value){ $value = mb_convert_encoding($value, 'UTF-8', 'auto'); } echo json_encode($arr); ?>
JSON 仕様では、null 値の使用が許可されていません。したがって、配列に null 値が含まれている場合、 json_encode() を使用すると変換が失敗し、null が返されます。
現時点では、array_map() 関数を使用して、配列内の null 値を空の文字列に置き換えることができます。例:
<?php $arr = array("name" => "John", "age" => null, "city" => "New York"); $arr = array_map(function($value){ return $value !== null ? $value : ''; },$arr); echo json_encode($arr); ?>
JSON 内のキー名は文字列型である必要があります。つまり、キー名は文字列型である必要があります。配列には文字列を指定する必要があります。数字をキーとして使用している場合、json_encode() 関数の使用に問題が発生します。
次の例では、json_encode() 関数を使用すると、結果は空の文字列になります:
<?php $arr = array(0=>'apple',1=>'banana',2=>'orange'); echo json_encode($arr); ?>
このとき、数値キーの名前を文字列型に変更する必要があります。 。例:
<?php $arr = array('0'=>'apple','1'=>'banana','2'=>'orange'); echo json_encode($arr); ?>
配列内に無限ループ参照がある場合、json_encode() が発生します。関数は配列を処理できず、空の文字列を返します。配列に自己参照関係がネストされている場合、json_encode() を使用すると必ずこの問題が発生します。
この問題を解決する際には、配列をシリアル化できることを確認する必要があります。つまり、すべてのオブジェクト参照をシリアル化可能なデータ型に置き換える必要があります。例:
<?php $arr = array(); $item1 = array('id'=>1,'name'=>'apple'); $item2 = array('id'=>2,'name'=>'banana'); $item1['next'] = &$item2; $item2['prev'] = &$item1; $item3 = array('id'=>3,'data'=>array_merge($item1,$item2)); $arr[] = $item1; $arr[] = $item2; $arr[] = $item3['data']; echo json_encode($arr); ?>
この例では、自己参照関係を含む配列を作成します。この問題を解決するために、オブジェクト参照をシリアル化可能なデータ型に変更しました。これにより、無限の参照サイクルの問題が回避され、配列を JSON 文字列に正常に変換できるようになりました。
概要
PHP で json_encode() を使用するときに空の JSON 文字列が見つかってもパニックにならないでください。上記の 4 つの方法に従えば、この問題は簡単に解決できます。配列が UTF-8 でエンコードされていること、配列に null 値が含まれていないこと、配列内のキー名が有効であること、配列内に無限循環参照がないことを確認してください。 json_encode( ) 関数を使用して、配列を JSON 文字列に正常に変換します。
以上がPHP配列をJSON形式に変換すると空になる場合の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。