9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

API から返却される JSON オブジェクト(連想配列)に順番を期待してはいけない

Posted at

起こったこと

js で API に問合せして JSON オブジェクトを受け取り、受け取った内容を <li>...</li> で表示させる処理を実装しようとしていました。

API からは以下のようにキーが数値になっている JSON が返却されます。

.json
{
    59: {"name": "Tシャツ", "category": 5, "price": 3000},
    24: {"name": "ジャケット", "category": 12, "price": 12000},
    75: {"name": "デニム", "category": 18, "price": 5000}
}

このとき、サーバー(PHP)で持っている連想配列の並び順のまま返却されると思っていました。

しかし返却された JSON を見ると以下のように順序が変わっていました。

.json
{
    24: {"name": "ジャケット", "category": 12, "price": 12000},
    59: {"name": "Tシャツ", "category": 5, "price": 3000},
    75: {"name": "デニム", "category": 18, "price": 5000}
}

順番が変わる理由

下記のページが参考になりました。

言語の仕様によっては例外もあるようですが、JSON に限らずキー、バリューで表現されるデータ形式は順番を保証しないと考えるのがベターようです。

これはよく考えれば当たり前のことかもしれません。

配列の値にアクセスする場合は「X番目の値をください」と言って値を受け取るため、順番が非常に重要な要素となりますが、連想配列(JSON オブジェクト、ハッシュ、マップ、ディクショナリー...)は値を取り出すためのキーを自分で決めているため、順番がバラバラになっても本来問題ないはずです。

とはいえ、API から返却される JSON の順番がわざわざ変わるとは思っていなかったため、気づくまでに時間がかかりました。。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?