【发布时间】:2018-07-19 08:28:07
【问题描述】:
我有一个 json 对象,它是针对 post 调用返回的
r = requests.post("url", json=data)
我正在做r.json() 来获取 json 对象。但据我了解,它创建了一个无序的 dict 对象。我需要保留订单。
我看到了这里描述的解决方案:Items in JSON object are out of order using "json.dumps"?
但我的挑战是我的起点是响应对象。如何获取并转换为保留顺序的 json?
添加更多细节:
我的 API 调用返回一个表单对象:
[{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
},
{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
},
{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
}
]
我有一个包含三列 key01、key02 和 keyN 的表。
在对维护 key01、key02 和 keyN 的特定顺序的软件进行一些小操作后,我需要将此 json 对象发布。
但是,一旦我执行 response.json(),它就会改变顺序。我尝试使用其他两个线程中提到的有序列表方法,但到目前为止我的对象看起来像这样:
b"OrderedDict([('key01','value01'),('key02','value02'),('keyN','valueN')])
我如何获得一个看起来像这样的 json:{"key01":"value01","key02":"value02","keyN":"valueN"}
【问题讨论】:
-
特别是在 data 设为
OrderedDict -
@BaileyParker OP 要求订购返回 json(由
r.json()访问),他们没有询问data。 -
确实,我看错了。我认为依赖来自服务器的 json 密钥的顺序(尤其是您无法控制的,但即使是您可以控制的)非常脆弱。我建议反对它。如果您想以特定顺序遍历
dict,为什么不列出键keys = ['first', 'second', ...]然后for k in key: r.json()[k]? -
嗨@BaileyParker 感谢您的回复。我有一个内部进程,它接受一个 json 对象并将其映射到数据库表。中的行顺序。表必须与 json 中的确切序列匹配。不幸的是,我无法更改中间逻辑(它是供应商产品)。从 API 返回的元素序列与表中相同。 response.json() 方法正在改变它。
标签: python json python-requests