ホームページ  >  記事  >  バックエンド開発  >  PHP配列をJSON形式に変換すると空になる場合の解決方法

PHP配列をJSON形式に変換すると空になる場合の解決方法

PHPz
PHPzオリジナル
2023-04-20 15:05:541047ブラウズ

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 文字列に変換します。結果として、空の文字列が得られます。この結果は私たちを驚かせ、私たち自身のスキルレベルに疑問を抱かせました。

トラブルシューティング

次に、問題を段階的にトラブルシューティングしてみましょう。

  1. 配列が UTF-8 エンコードされていることを確認してください

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);
?>
  1. 配列に null 値が含まれていないことを確認してください

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);
?>
  1. 配列内のキー名が有効であることを確認してください

JSON 内のキー名は文字列型である必要があります。つまり、キー名は文字列型である必要があります。配列には文字列を指定する必要があります。数字をキーとして使用している場合、json_encode() 関数の使用に問題が発生します。

次の例では、json_encode() 関数を使用すると、結果は空の文字列になります:

<?php
$arr = array(0=>'apple',1=>'banana',2=>'orange');
echo json_encode($arr);
?>

このとき、数値キーの名前を文字列型に変更する必要があります。 。例:

<?php
$arr = array(&#39;0&#39;=>'apple','1'=>'banana','2'=>'orange');
echo json_encode($arr);
?>
  1. 配列内に無限ループ参照がないことを確認してください

配列内に無限ループ参照がある場合、json_encode() が発生します。関数は配列を処理できず、空の文字列を返します。配列に自己参照関係がネストされている場合、json_encode() を使用すると必ずこの問題が発生します。

この問題を解決する際には、配列をシリアル化できることを確認する必要があります。つまり、すべてのオブジェクト参照をシリアル化可能なデータ型に置き換える必要があります。例:

<?php
$arr = array();
$item1 = array(&#39;id&#39;=>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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。