我正在尝试将两个参数(KeepDuplicates和OrderDic)传递给Object_pairs_hooks,但不知道这样做的pythonic方法,有人可以帮忙吗?
raw_data = json.loads(json_value, object_pairs_hook=KeepDuplicates, object_pairs_hook=OrderedDict)
KeepDuplicates - 允许重复的JSON密钥
OrderDic - 应按照与输入JSON
相同的顺序组织JSON谢谢!
答案 0 :(得分:1)
json.loads
创建一个键/值对列表,默认操作是将dict
应用于该值并返回它。 object_pairs_hook
会对列表执行任何操作,而不是dict
。
如果将object_pairs_hook
设置为lambda x: x
(只按原样返回每个元素),它将按照读取顺序返回key_value对列表。
>>> x = '{"3": 3, "0": 0, "1": 1, "2": 2, "3": 3, "4": 4}'
>>> json.loads(x, object_pairs_hook=lambda el: el)
[('3', 3), ('0', 0), ('1', 1), ('2', 2), ('3', 3), ('4', 4)]
然后,您可以使用您订购的键/值对来制作任何类型的对象。这将是一种非常有效的方法来保持秩序并保持重复。除非您正在创建自己的对象,否则我不知道接受重复键的类字典类。列表可能是您最好的选择,也可能是您自己的课程。
class SillyClass(object):
def __init__(self, a_list):
self._list = a_list[:]
def show(self):
return self._list[:]
to_test = json.loads(x, object_pairs_hook=SillyClass)
print(to_test.show())
output => [('3', 3), ('0', 0), ('1', 1), ('2', 2), ('3', 3), ('4', 4)]