2016-05-26 8 views
1

オブジェクトのリストを返すJSON APIを作成したいとします。各オブジェクトには、ID、名前、その他の情報があります。 APIはJavaScriptを使用して消費されます。JSONリストの最適化

私のJSON出力のための自然な選択肢があるように思わ:

"myList": [ 
    { 
    "id": 1, 
    "name": "object1", 
    "details": {} 
    }, 
    { 
    "id": 2, 
    "name": "object2", 
    "details": {} 
    }, 
    { 
    "id": 3, 
    "name": "object3", 
    "details": {} 
    }, 
] 

今度は、私はすべてのオブジェクトを取得するには、私のAPIを使用しますが、最初のID1およびID3と、その後何か他のものをID2との何かをしたいと想像してみましょう。

その後、私は直接、特定のIDのオブジェクトを取得することができることは興味があるかもしれない:

"myList": { 
    "1": { 
    "name": "object1", 
    "details": {} 
    }, 
    "2": { 
    "name": "object2", 
    "details": {} 
    }, 
    "3": { 
    "name": "object3", 
    "details": {} 
    }, 
} 

コード内のどこかが、私はすべてを通して、単にループにしたい場合は、この第二の選択肢は少なく、自然かもしれ要素。

APIをすべての要素をループしたり、特定の要素のみを使用して(各要素を専用呼び出しせずに)使用する場合は、これらの使用例に適していますか?

+0

どのような言語/フレームワークでもJSONを読む方法は重要ではありません。 JSONのリストの最適化について議論したいだけです。 – j3r6me

答えて

2

例では、ID値を1からid1に変更しました。 idを常時追加して削除する必要があるため、これはデータの操作を煩わしくすることになります。あなたがそれをしなかった、そしてあなたがオブジェクトのソート順に頼っていた場合は

、あなたはJSエンジンに応じて、驚きのためであってもよい:

var source = JSON.stringify({z: "first", a: "second", 0: "third"}); 
var parsed = JSON.parse(source); 
console.log(Object.keys(parsed)); 
// ["0", "z", "a"] 

私の経験では、で動作するようです配列をトランスポート層に配置し、必要に応じてデータにインデックスを付ける(つまり、配列をマップに変換する)。

+0

私は理解しようとしていますが、ここでは逆のことをしているようです:トランスポート層でオブジェクトを使用し、後に配列を取得していますか?私は "idX"を削除して私の質問を更新しました。 – j3r6me

+0

私の答えの例のコードは、あなたが[z、a、0]にデータを置く順序は必ずしも[0、z、a]の注文とは限りません。したがって、注文リストを使って作業している場合は、オブジェクトに頼らないでください。 – rodneyrehm

+0

偉大な私はそれを得る。だからあなたの答えは、APIの配列を公開することが望ましいということです。次に、必要に応じてAPIを使用する際に各要素をマップできます。ありがとう。 – j3r6me