如何使用数字顺序的键打印JSON(即好像字符串键是整数)

时间:2015-07-10 20:38:15

标签: python json python-3.x

我有以下JSON

{
    "clips": { 
        "0": {
            "name": "Please", 
            "id": 1, 
        },
        "1": {
            "name": "Print", 
            "id": 2 
        },
        "10": {
            "name": "me", 
            "id": 3 
        },
        "2": {
            "name": "in order", 
            "id": 4 
        }
    }
}

这样做是这样的:

print(json.dumps(data, sort_keys=True, indent=4))这很棒,因为它以字母数字顺序打印键。但是,我需要按照实际的数字顺序打印这些内容,因此键"2"上方的键位于键"10"之前。

我知道python通常不会对字典中的键进行排序,但是我需要这样做,因为json实际上会被人类读取并且命令它会很棒。谢谢。

3 个答案:

答案 0 :(得分:4)

你可以使用dict理解技巧:

import json

d = dict({'2':'two', '11':'eleven'})
json.dumps({int(x):d[x] for x in d.keys()}, sort_keys=True)

输出:

'{"2": "two", "11": "eleven"}'

答案 1 :(得分:3)

试试这个。

from collections import OrderedDict

ordKeys = sorted([int(x) for x in originalDict.keys()])

newDict = OrderedDict()
for key in ordKeys:
    newDict[str(x)] = originalDict[str(x)]

#Print out to JSON

答案 2 :(得分:1)

这个怎么样:

import json
import collections
a = '''
    {"clips": 
        { 
        "0":{"name": "Please", "id": 1,},
        "1": {"name": "Print", "id": 2,},
        "10": {"name": "me", "id": 3,},
        "2": {"name": "in order", "id": 4,}
    }}
'''

#replace comas before } otherwise json.loads will fail
a = a.replace(',}','}')

#parse json
a = json.loads(a)

#converting keys to int
a['clips'] = {int(k):v for k,v in a['clips'].items()}

#sorting
a['clips'] = collections.OrderedDict(sorted(a['clips'].items()))

print a