Why do int keys of a python dict turn into strings when using json.dumps?
The simple reason is that JSON does not allow integer keys.
object
{}
{ members }
members
pair
pair , members
pair
string : value # Keys *must* be strings.
As to how to get around this limitation - you will first need to ensure that the receiving implementation can handle the technically-invalid JSON. Then you can either replace all of the quote marks or use a custom serializer.
If you really want to, you can check keys for being convertable to integers again using:
def pythonify(json_data):
for key, value in json_data.iteritems():
if isinstance(value, list):
value = [ pythonify(item) if isinstance(item, dict) else item for item in value ]
elif isinstance(value, dict):
value = pythonify(value)
try:
newkey = int(key)
del json_data[key]
key = newkey
except TypeError:
pass
json_data[key] = value
return json_data