【发布时间】:2015-09-04 12:40:23
【问题描述】:
我正在尝试使用 json.load() 方法在 Python 中解析一些包含 JSON 对象的文本文件。它适用于其中一组,但对于这一组则不起作用:
{
"mapinfolist":{
"mapinfo":[
{"sku":"00028-0059","price":"38.35","percent":"50","basepercent":"50","exact":0,"match":0,"roundup":0}
,{"sku":"77826-7230","price":"4.18","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
,{"sku":"77827-1310","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
,{"sku":"77827-2020","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
,{"sku":"77827-3360","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
,{"sku":"77827-4060","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
,{"sku":"77827-4510","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
,{"sku":"77827-7230","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
],
"count":2
}
}
它在一个名为“map.txt”的文件中——我使用 open('map.txt') 打开它,然后调用 json.load()。当我运行我的测试程序 (test.py) 时,会生成以下错误跟踪:
Traceback (most recent call last):
File "test.py", line 28, in <module>
main()
File "test.py", line 23, in main
map_list = json.load(f1)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/json/__init__.py", line 268, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/json/__init__.py", line 318, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/json/decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/json/decoder.py", line 361, in raw_decode
raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)
JSON 对象是有效的 - 当我将它放入 https://www.jsoneditoronline.org/ 时,它会被正确解析和显示,所以当我尝试在 Python 中执行它时,我无法确定是什么阻止了它工作。任何建议将不胜感激。谢谢!
编辑:这是我的代码。
import json
def main():
with open('map.txt') as f1:
map_list = json.load(f1)
尝试map_list = json.loads(f1.read()) 也不起作用,并给我一个几乎相同的错误跟踪。
编辑 - 已解决:
我刚刚将 FROM map.txt 复制并粘贴到一个新的 TextEdit 文件 map2.txt 中,并改用了新文件,它现在可以工作了。我直接从旧文件复制并没有进行任何更改 - 唯一的区别是它是一个不同的文件。我不知道为什么会这样——有什么想法吗?我想了解可能发生的情况,以便将来避免该问题。
【问题讨论】:
-
@John 它已被添加!
-
如果我将您的 JSON 内容复制到一个文件中并在 Python 2.7 中使用
json.load(file('blah.txt'))加载它,它工作正常。如果我将它复制到 ideone.com 并使用 Python 3 和json.loads(""" blah blah """)它可以工作。诡异的。我不得不猜测它要么引用了错误的文件(名称中的拼写错误),要么文件被保存在一个奇怪的编辑器/编码中,这使得它被不同地解释? -
@TessellatingHeckler 我将它保存在 TextEdit 中并确保它是纯文本。文件名也绝对正确。 :(
-
通过跟踪,肯定有比@shinytinsmile 更多的代码,它可能是由其他代码行引起的,不一定在你给我们的这个块中。因为您提供给我们的代码有效
-
重点。我注意到它在错误中显示
MAP_list = json.load(f2),在您的代码示例中它被称为f1- 您打开正确的文件名但随后传递 json.load 一个不同的文件变量?