import json
t = (((9, 1, 4),), (), ((14, 5, 10),), ((0, 4, 5),))
j = json.dumps(t)
x = json.loads(j)
print(t) # (((9, 1, 4),), (), ((14, 5, 10),), ((0, 4, 5),))
print(x) # [[[9, 1, 4]], [], [[14, 5, 10]], [[0, 4, 5]]]
我如何直接从json.loads()将json字符串解码为(层次结构较深的)元组?
我知道json编码将元组和列表都保存为“数组”,但实际上,我不可变的“ t”变量非常大且只读,因此元组样式(据我所知)更快,更紧凑在内存中而不是在列表样式中。
想法?谢谢!
答案 0 :(得分:1)
JSON 是 JavaScript Object Notation 的缩写,JavaScript中有一种名为 array 的数据结构,为了定义数组,我们使用方括号{ {1}} [
不像Python中的元组一样,将]
(
括起来。
因此,只要您尝试将元组转换为字符串)
,它就会在内部更改为数组形式,如 JavaScript 中的形式,并在 Python 中列出周围带有括号json.dumps()
[
。
]
如果您的意图是将元组转换为字符串,然后再次从该字符串表示形式转换为实际的 Python 对象(这里是 tuple ),那么这里就是解决方案。
import json
t = (((9, 1, 4),), (), ((14, 5, 10),), ((0, 4, 5),))
j = json.dumps(t)
x = json.loads(j)
print(t) # (((9, 1, 4),), (), ((14, 5, 10),), ((0, 4, 5),))
print(x) # [[[9, 1, 4]], [], [[14, 5, 10]], [[0, 4, 5]]]