我有以下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实际上会被人类读取并且命令它会很棒。谢谢。
答案 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