【问题标题】:Python-problems with parsing list in JSON Format解析 JSON 格式列表的 Python 问题
【发布时间】:2016-06-05 22:32:28
【问题描述】:

我正在使用 python 2.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, 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.load()

标签: python json


【解决方案1】:

您在文件中将字典双编码为 JSON,然后再编码为 pickle:

json_format = json.dumps(d.items())
Fichier =open('C:\\Users\\Dev\\Desktop\\file\\json.json','wb')
pickle.dump(json_format,Fichier)

这会将json_format 字符串 写入打开的文件对象,作为 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 对象(第一个 sn-p)加载回 OrderedDict:

with open('C:\\Users\\Dev\\Desktop\\file\\json.json','rb') as Fichier:
    final_result_from_fischier = json.load(Fichier, object_pairs_hook=OrderedDict)

【讨论】:

  • @bader:啊,对不起,我很抱歉。我已经更正了答案;我不小心复制了您的 pickle 行,而不是将它们更正为 json.dumpjson.load 调用。过错!
  • 成功了 成功了 谢谢,非常感谢 :)
  • 我还有其他问题,为什么我找不到与列表 d 相同的格式??当我打开文件时,我发现:{“3215”:假,“3216”:假,“8004”:假,“8002”:假}
  • 不确定你在问什么?
  • 当我打开文件时我发现:{"3215": false, "3216": false, "8004": false, "8002": false} 为什么没有找到这样的列表: [(3215, False), (3216, False), (8004, False), (8002, False)] ???
猜你喜欢
  • 2015-11-01
  • 2018-02-12
  • 2015-10-29
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多