django simplejson返回的值不按顺序[duplicate]

ki0zmccv  于 2022-12-05  发布在  Go
关注(0)|答案(4)|浏览(123)

此问题在此处已有答案

Items in JSON object are out of order using "json.dumps"?(8个答案)
9年前就关门了。
在Django中使用simplejson时,我有时需要严格按顺序发送信息。

values = {"entry1":"value1","entry2":"value2","entry3":"value3"}
return HttpResponse(simplejson.dumps(values),content_type="application/json")

这就是它返回的内容

{"entry2": "value2", "entry3": "value3", "entry1": "value1"}

但我希望它返回以下内容:

{"entry1":"value1","entry2":"value2","entry3":"value3"}

如何在simplejson中按顺序发送信息?

w41d8nur

w41d8nur1#

我有时需要严格按顺序发送信息。
不要使用字典,使用元组列表:

values = [("entry1", "value1"), ("entry2", "value2"), ("entry3", "value3")]

Dictionaries * 和 * JSON对象没有固定顺序。它们都不会保留您的输入顺序,也不需要保留。
引用JSON RFC
对象是零个或多个名称/值对的无序集合[...]
和Python dict.items()文档:
键和值以非随机的任意顺序列出,随Python实现而变化,并取决于字典的插入和删除历史。

flvlnr44

flvlnr442#

解决这个问题的传统方法是使用2维元组/列表,如Martjin Pieters所建议的。
然而,实现这一点的更Python的方式是使用OrderedDict。
有关类似问题/解决方案,请参阅:Can I get JSON to load into an OrderedDict in Python?
有关OrderedDict文档,请参见:http://docs.python.org/2/library/collections.html#collections.OrderedDict

yizd12fk

yizd12fk3#

可以在转储中使用sort_keys=True选项:

simplejson.dumps(values, sort_keys=True)

它将按排序顺序打印出包含键的字典。然而,字典本身是无序的,因此当您将字典作为HttpResponse的参数时,结果将不按顺序排列。

bwleehnv

bwleehnv4#

这不是simplejson的问题,这是python中dict的行为。dict没有排序,所以你不能真正预测它们的顺序。
您可以重新格式化数据,使其按如下顺序排列:

values = [ {"entry1":"value1"}, { "entry2":"value2"} ,{"entry3":"value3"} ]

values = [ {"key":"entry1", "value":"value1"},
           {"key":"entry2", "value":"value2"},
           {"key":"entry3", "value":"value3"}
         ]

相关问题