【问题标题】:Load pretty printed JSON from file into python?将漂亮打印的 JSON 从文件加载到 python 中?
【发布时间】:2013-07-18 18:05:53
【问题描述】:

我有一个以漂亮打印格式存储的大型 JSON 文档,文件如下所示:

$ nano data.json

{
"type" : "object",
"properties" : {
  "price" : {"type" : "number"},
  "name" : {"type" : "string"},
  },
}

我找到的读取此类 json 文件的传统方法,例如...

with open('data.json', 'r') as handle:
    data = json.load(handle)

还有……

json_data=open('data.json','r')
data = json.load(json_data)
json_data.close()

还有……

data = []
with open('data.json') as f:
    for line in f:
        data.append(json.loads(line))

还有……

ss = ''
with open('data.json', 'r') as f:
    for line in f:
        ss += ''.join(line.strip())

data = json.loads(ss.decode("utf-8","replace"))

...似乎只适用于单字符串,而不是漂亮打印格式的 JSON。

如何从文件中加载这种格式的 JSON?我在尝试这些格式时不断遇到的错误是......

Traceback (most recent call last):
  File "<stdin>", line 7, in <module>
  File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting , delimiter: line 1 column 250 (char 250)

ValueError: Expecting , delimiter: line 9 column 13 (char 310)

【问题讨论】:

  • 您的 JSON 无效; not 应该有一个尾随逗号。漂亮的印刷不是这里的问题。
  • 真的吗?我从 jsonschema 文档中提取了这个 json:pypi.python.org/pypi/jsonschema 他们有逗号。
  • 他们定义了一个 python 字典,其中逗号很好。 Python 和 JSON 可能看起来很相似,但它们并不是一回事。
  • 是的,你是对的。我想我会把它保留为“这里有很多加载有效 JSON 的方法”再次感谢 Martijn。
  • 不确定人们是否会这样发现;这里已经有很多其他 Python / JSON 问题,在这种情况下,您可能会被视为受骗者。 :-)

标签: python json io pretty-print jsonschema


【解决方案1】:

对于将来发现此问题的任何其他人,在谷歌上搜索类似于我发布此内容时所做的事情-您可能认为您的错误在于加载,但我上面的错误实际上是 JSON 本身,而不是加载(正如 Martijn Pieters 指出的那样)。我正在从 jsonschema python 项目中复制模式——但事实证明,这不是 JSON,而是一个看似相似的 python 字典。

【讨论】:

  • 我也遇到过同样的问题,原因都是一样的——我用的是单引号而不是双引号(别忘了)和其他类似的东西。
猜你喜欢
  • 1970-01-01
  • 2014-05-12
  • 2012-02-28
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 2012-10-08
相关资源
最近更新 更多