Python json.loads changes the order of the object

json, python, python-2.7

Solution

Dictionaries (objects) in python have no guaranteed order. So when parsed into a `dict`, the order is lost.

If the order is important for some reason, you can have `json.loads` use an `OrderedDict` instead, which is like a `dict`, but the order of keys is saved.

from collections import OrderedDict

data_content = json.loads(input_data.decode('utf-8'), object_pairs_hook=OrderedDict)

Problem

I've got a file that contains a JSON object. It's been loaded the following way: ``` with open('data.json', 'r') as input_file: input_data = input_file.read() ``` At this point input_data contains just a string, and now I proceed to parse it into JSON: ``` data_content = json.loads(input_data.decode('utf-8')) ``` data_content has the JSON representation of the string which is what I need, but for some reason not clear to me after json.loads it is altering the order original order of the keys, so for instance, if my file contained something like: ``` { "z_id": 312312, "fname": "test", "program": "none", "org": null } ``` After json.loads the order is altered to let's say something like: ``` { "fname": "test", "program": None, "z_id": 312312, "org": "none" } ``` Why is this happening? Is there a way to preserve the order? I'm using Python 2.7.

Original source

Related problems