我正在尝试使用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())
也不起作用,并且给出了几乎相同的错误跟踪。
编辑-已解决:
我只是从map.txt复制并粘贴到一个新的TextEdit文件map2.txt中,然后使用新文件,现在它可以工作了。我直接从旧文件中复制,没有做任何更改-唯一的区别是它是一个不同的文件。我无法理解为什么会这样-有任何想法吗? 我想了解可能发生了什么,以便将来避免此问题。
json.load(file('blah.txt'))
加载它,那么它可以正常工作。如果我将其复制到http://ideone.com并使用Python 3和json.loads(""" blah blah """)
,它也可以正常工作。奇怪。我猜测要么是引用了错误的文件(名称中有错别字),要么是该文件以奇怪的编辑器/编码保存,导致其被解释为不同的内容? - TessellatingHecklerMAP_list = json.load(f2)
,而在你的代码示例中它被称为f1
- 有没有可能你打开了正确的文件名,但是却传递了不同的文件变量给 json.load 函数? - TessellatingHeckler