疎配列の 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"}}
説明:
スパース配列をオブジェクトとしてエンコードしないようにするには、次のようにします。 array_values($a) を使用して、穴のない再インデックスされた配列を取得します。 json_encode はこれを JSON 配列として適切にエンコードします。
以上が「json_encode」がスパース配列を JSON オブジェクトに変換するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。