我有一个文件,其中包含来自json.dumps(d)的字符串,其中d是最初创建的字典:
>> d = {1: [1,2,3], 2:[5,6,7], 3:[7,8,9]} # integer keys
当我打开这个文件并将字典放入RAM时:
>> d = json.loads(open('file.txt', 'r').read())
>> d[1]
## Gives error
>> d['1']
## doesn't give error
我在保存字典时做错了吗?
答案 0 :(得分:3)
不,你误解了JSON。 JSON对象中的名称必须为字符串;即使使用的编程语言可以支持它们,它们也不能是任何其他类型。如果您希望它们在解码后不是字符串,那么您需要在单独的解码器中实现额外的解析。请考虑使用json.JSONDecoder
的object_hook
或object_pair_hook
个参数。
答案 1 :(得分:0)
这是完全正常的。只有json字符串中的数组可以通过position调用(整数调用它)。在你的情况下。如果您查看json.dumps({1: [1,2,3], 2:[5,6,7], 3:[7,8,9]})
的输出,您会看到{"1": [1, 2, 3], "2": [5, 6, 7], "3": [7, 8, 9]}
。因此,当您尝试访问该值时,字符串键。