Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?
Organization

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

起こったこと

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

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

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

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

しかし返却された 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 の順番がわざわざ変わるとは思っていなかったため、気づくまでに時間がかかりました。。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?