michael_clarke
michael_clarke

Reputation: 171

Trouble Sorting JSON

I have a JSON object like the following:

{"Data": {
     "290": {
             ...
            }
     "300": {
             ...
            }
     "281": {
             ...
            }
         }
 }

How would I sort this JSON based on the top container keys (i.e. "290", "300", "281")?

Edit: So I used

$.getJSON('current/csf.txt', function(data) { arr = data["Data"]; }

And it sorted them based on the key. Why did this happen?

Upvotes: 0

Views: 164

Answers (4)

Esailija
Esailija

Reputation: 140210

Your structure is wrong, it should be something like:

{
  "Data": [
    {
      "id": "290"
    },
    {
      "id": "300"
    },
    {
      "id": "282"
    }
  ]
}

Objects are for unordered data. Use arrays for ordered data. And the array is really easy to sort here:

obj.Data.sort(function(a,b){
    return a.id - b.id;
});

You can convert to this structure like so:

 function copyProps(dest, src) {
     for (var key in src) {
         dest[key] = src[key];
     }
     return dest;
 }

 var newData = [];

 for (var key in obj.Data) {
     newData.push(copyProps({
         id: key
     }, obj.Data[key]));
 }

Upvotes: 4

jackwanders
jackwanders

Reputation: 16010

Even if you COULD sort object attributes, there's no guarantee that you could read them back in sorted order. In Javascript, object attributes are not stored in a specific order; an object simply has attributes.

You cannot use array index notation to access object attributes, so the notion of sorting object attributes by key is moot.

Upvotes: 1

Cecchi
Cecchi

Reputation: 1535

I agree with Amberlamps comment, you shouldn't be trying to sort the keys of an object, but if you wanted to for some reason you might take a look at underscore.js's sortBy method

Upvotes: 1

Quentin
Quentin

Reputation: 943142

You've tagged this "JavaScript" so I assume you mean "A JavaScript object generated from this JSON".

In which case:

  1. Loop over the property names (with a for in loop).
  2. Use them to populate an array.
  3. Sort the array.
  4. Use the array as a map.

(You can't store ordered data in an object).

If you want to store the results in JSON, then you will need to change your data structure (and use an array (of objects)). Objects are explicitly unordered.

Upvotes: 4

Related Questions