【发布时间】:2019-12-04 22:16:11
【问题描述】:
我有一个从 SQL 查询排序结果构建的字典,就在我 jsonify() 输出这个结果之前,当我打印到控制台时它显示以下内容(按照我想要的正确顺序,按 num 键排序):
{'tradelist': [{'num': 0, 'trade': 1, 'type': 'entry long', 'signal': 'Long', 'date': '2017-01-31', 'price': 928.5, 'contracts': 109.1395}, {'num': 1, 'trade': 1, 'type': 'exit long', 'signal': 'Short', 'date': '2017-03-10', '价格': 1005.0, '合约': 109.1395}, {'num': 2, 'trade': 2, 'type': '入场空头', 'signal': '空头', 'date': '2017-03-10', 'price': 1005.0, 'contracts': 84.0427}, {'num': 3, 'trade': 2, 'type': 'exit short', 'signal': '关闭挂单 短','日期':'2017-03-19','价格':970.0,'合同':84.0427}]}
之后我除了返回 jsonify(result) 之外什么都不做,但是当我通过 REST API 运行查询时,输出显示如下:
{"tradelist":[{"contracts":109.1395,"date":"2017-01-31","num":0,"price":928.5,"signal":"Long","trade ":1,"类型":"条目 long"},{"contracts":109.1395,"date":"2017-03-10","num":1,"price":1005.0,"signal":"Short","trade":1," type":"exit long"},{"contracts":84.0427,"date":"2017-03-10","num":2,"price":1005.0,"signal":"Short","trade ":2,"type":"条目 short"},{"contracts":84.0427,"date":"2017-03-19","num":3,"price":970.0,"signal":"收盘 entry(s) order Short","trade":2,"type":"exit short"}]}
所以似乎 Jsonify 出于某种原因弄乱了顺序并对键进行了字母排序,任何关于如何防止这种情况发生的建议
sql = "SELECT num, trade, type, signal, date, price, contracts from tradelist ORDER BY num"
query = conn.execute(sql)
result = {'tradelist': [dict(zip(tuple (query.keys()), row)) for row in query.cursor]}
print(result)
return jsonify(result)
【问题讨论】:
-
我仍然按顺序看到 num-0>num-1>num-2>num-3 条记录。你说的是json列表里面的键吗?
-
jsonify来自哪里? -
这真的会导致问题吗?没有什么应该关心 JSON 对象的项目的顺序。
-
@mad_ 确实,在谈论密钥顺序
-
@glibdud jsonify 随 Flask 一起提供,同意如果输出被解析它不会发挥太大作用,一切都在那里,但它是客户要求准确地显示输出,因为它在 sql 表中
标签: python json sqlite dictionary