junihh
junihh

Reputation: 502

Prevent javascript from changing the order of the JSON

Working with a JSON data, javascript change the order of the objects from this:

{
    "01": { "disabled": 0, "factor": 10, "id": "01", "tickets": 0 },
    "02": { "disabled": 0, "factor": 10, "id": "02", "tickets": 0 },
    "03": { "disabled": 0, "factor": 10, "id": "03", "tickets": 0 },
    "04": { "disabled": 0, "factor": 10, "id": "04", "tickets": 0 },
    "05": { "disabled": 0, "factor": 10, "id": "05", "tickets": 0 },
    "06": { "disabled": 0, "factor": 10, "id": "06", "tickets": 0 },
    "07": { "disabled": 0, "factor": 10, "id": "07", "tickets": 0 },
    "08": { "disabled": 0, "factor": 10, "id": "08", "tickets": 0 },
    "09": { "disabled": 0, "factor": 10, "id": "09", "tickets": 0 },
    "10": { "disabled": 0, "factor": 10, "id": "10", "tickets": 0 },
    "11": { "disabled": 1, "factor": 40, "id": "11", "tickets": 0 }
}

To this:

{
    "10": { "disabled": 0, "factor": 10, "id": "10", "tickets": 0 },
    "11": { "disabled": 1, "factor": 40, "id": "11", "tickets": 0 },
    "01": { "disabled": 0, "factor": 10, "id": "01", "tickets": 0 },
    "02": { "disabled": 0, "factor": 10, "id": "02", "tickets": 0 },
    "03": { "disabled": 0, "factor": 10, "id": "03", "tickets": 0 },
    "04": { "disabled": 0, "factor": 10, "id": "04", "tickets": 0 },
    "05": { "disabled": 0, "factor": 10, "id": "05", "tickets": 0 },
    "06": { "disabled": 0, "factor": 10, "id": "06", "tickets": 0 },
    "07": { "disabled": 0, "factor": 10, "id": "07", "tickets": 0 },
    "08": { "disabled": 0, "factor": 10, "id": "08", "tickets": 0 },
    "09": { "disabled": 0, "factor": 10, "id": "09", "tickets": 0 }
}

Note the "10" and "11" rows at the begin even in the original JSON are at the end.

I fix it with this:

var data = JSON.parse(json_data);
var keys = Object.keys(data).sort();

for ( var k in keys )
{
    var key = keys[k];
    var row = data[key];
    console.log(row);
};

How to prevent javascript from changing the order of the rows?

That ERROR (because it is) made me mad. :-/

Thanks for any help.

Upvotes: 0

Views: 1935

Answers (1)

Matheus Avellar
Matheus Avellar

Reputation: 1515

You should check bpierre's answer to "Does JavaScript Guarantee Object Property Order?".

To sum it up, the definition of an Object in ECMAScript says

It is an unordered collection of properties [...]

In his answer, he recommends the use of Map in the more recent versions of JavaScript.

So the answer is no, you can't prevent JavaScript from changing the order of the JSON, because there is no definitive order in the first place.

Upvotes: 1

Related Questions