ホームページ > バックエンド開発 > PHPチュートリアル > 「json_encode」がスパース配列を JSON オブジェクトに変換するのはなぜですか?

「json_encode」がスパース配列を JSON オブジェクトに変換するのはなぜですか?

Susan Sarandon
リリース: 2024-11-25 08:55:12
オリジナル
782 人が閲覧しました

Why Does `json_encode` Convert Sparse Arrays to JSON Objects?

疎配列の JSON エンコーディングについて

JSON エンコーディングでは、疎配列 (インデックス値が欠落している配列) は異常です。これは、JSON の配列構文がインデックスをサポートしていないため、そのような配列を直接表すことが不可能であるためです。

質問:

なぜ json_encode はスパース配列を JSON としてエンコードするのですか?の代わりにオブジェクトarray?

答え:

スパース配列での json_encode の動作は、JSON がそのような配列を表現できないことに起因します。 json_encode は、スパース配列を検出すると、配列のキーと値のペアを維持するために、それを JSON オブジェクトとしてエンコードします。

例:

PHP を考えてみましょう。コード:

$a = array(
    new stdclass,
    new stdclass,
    new stdclass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';

echo json_encode($a) . "\n";
unset($a[1]);
echo json_encode($a) . "\n";
ログイン後にコピー

出力:

[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}
ログイン後にコピー

説明:

  • 最初のエンコードでは、スパース配列は、3 つの要素を含む有効な JSON 配列として表されます。インデックス 1 の設定を解除すると、スパース配列にホールが含まれるため、キーと値の関連付けを維持するために json_encode がそれを JSON オブジェクトに変換することになります。
解決策:

スパース配列をオブジェクトとしてエンコードしないようにするには、次のようにします。 array_values($a) を使用して、穴のない再インデックスされた配列を取得します。 json_encode はこれを JSON 配列として適切にエンコードします。

以上が「json_encode」がスパース配列を JSON オブジェクトに変換するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート