在包含json.dumps
和None
类型字典的对象上调用str
时,如何在不抛出异常的情况下对结果进行排序?我正在尝试使用sort_keys=True
,但却抛出TypeError
。我不关心None
和bar
如何相对于彼此进行排序,只要它在逐次运行时是一致的。
import json
foo = {None: 7, 'bar': 8}
json.dumps(foo)
打印
'{"bar": 8, "null": 7}'
但是
json.dumps(foo, sort_keys=True)
打印
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python35\lib\json\__init__.py", line 237, in dumps
**kw).encode(obj)
File "C:\Program Files\Python35\lib\json\encoder.py", line 198, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Program Files\Python35\lib\json\encoder.py", line 256, in iterencode
return _iterencode(o, 0)
TypeError: unorderable types: NoneType() < str()
答案 0 :(得分:0)
原来 我发现允许在JSON中排序和显示结构的一个解决方案是首先将其转换为JSON,然后对键进行排序,如下所示: 这确实会改变密钥(从null
的密钥是无效的JSON。显然,json.dumps(...)
会在返回之前将None
个密钥转换为字符串'null'
,但可能json.dumps(..., sort_keys=True)
会在转换为字符串之前进行排序。< / p>
import json
foo = {None: 7, 'bar': 8}
# {'bar': 8, None: 7}
foo_json = json.dumps(foo)
# '{"bar": 8, "null": 7}'
foo_prime = json.loads(foo_json)
# {'null': 7, 'bar': 8}
foo_sorted = json.dumps(foo_prime, sort_keys=True)
# '{"bar": 8, "null": 7}'
None/null
到'null'
),但会一直这样做。