JSON格式的Python解析列表问题
我使用Python2.7解析JSON格式的值 这是我的剧本:JSON格式的Python解析列表问题,python,json,Python,Json,我使用Python2.7解析JSON格式的值 这是我的剧本: from collections import OrderedDict import json import os import pickle d=OrderedDict([(3215, False), (3216, False), (8004, False), (8002, False), (3589, False), (3753, False), (3752, True), (3755, False), (3754
from collections import OrderedDict
import json
import os
import pickle
d=OrderedDict([(3215, False), (3216, False), (8004, False), (8002, False), (3589, False), (3753, False), (3752, True), (3755, False), (3754, False)]))
json_format = json.dumps(d.items())
Fichier =open('C:\\Users\\Dev\\Desktop\\file\\json.json','wb')
pickle.dump(json_format,Fichier)
Fichier =open('C:\\Users\\Dev\\Desktop\\file\\json.json','rb')
final_result_from_fichier = pickle.load(Fichier)
但是在执行这个脚本之后,我在json文件中找到了一些外部字符
这是我的脚本的输出:
S'[[3215, false], [3216, false], [8004, false], [8002, false], [3589, false], [3753, false], [3752, True], [3755, false], [3754, false]]'p0
我能做什么?您在文件中将字典双重编码为JSON,然后是pickle:
json_format = json.dumps(d.items())
Fichier =open('C:\\Users\\Dev\\Desktop\\file\\json.json','wb')
pickle.dump(json_format,Fichier)
这就是将json\u格式的字符串作为Pickle编码的数据写入打开的文件对象。即使您纠正了这一点,JSON格式也不是Python pickle格式。不能使用pickle
模块加载JSON。只需使用json.load()
即可
只需在字典中使用json.dump()
:
with open('C:\\Users\\Dev\\Desktop\\file\\json.json', 'wb') as Fichier:
json.dump(d, Fichier)
如果您想要一个JSON对象(键值对),或者如果您需要一个包含嵌套数组的JSON数组(每个数组都有一个键和一个值),请使用d.items()
with open('C:\\Users\\Dev\\Desktop\\file\\json.json', 'wb') as Fichier:
json.dump(d.items(), Fichier)
我将文件作为上下文管理器打开,以确保在写入操作完成后再次关闭
您可以使用以下命令将JSON对象(第一个代码段)加载回OrderedICT:
with open('C:\\Users\\Dev\\Desktop\\file\\json.json','rb') as Fichier:
final_result_from_fischier = json.load(Fichier, object_pairs_hook=OrderedDict)
你为什么在JSON数据文件上使用pickle.load()
?@bader:啊,对不起,我很抱歉。我已经更正了答案;我不小心复制了你的pickle
行,而没有将它们更正为json.dump
和json.load
调用。我有罪!它成功了,它成功了,谢谢,非常感谢:)我还有其他问题,为什么我找不到与列表d相同的形式??当我打开文件时,我发现:{“3215”:false,“3216”:false,“8004”:false,“8002”:false}不知道你在问什么?当我打开文件时,我发现:{“3215”:false,“3216”:false,“8004”:false,“8002”:false}为什么没有找到这样的列表:[(3215,false),(3216,false),(8004,false),(8002,false)]???