在Python中解析JSON对象时遇到问题

在Python中解析JSON对象时遇到问题,python,json,parsing,Python,Json,Parsing,我试图使用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

我试图使用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)
尝试
map\u list=json.loads(f1.read())
也不起作用,给我一个几乎相同的错误跟踪

编辑-已解决:


我刚刚从map.txt复制并粘贴到一个新的文本编辑文件map2.txt中,并使用了新文件,它现在可以工作了。我直接从旧文件复制,没有做任何更改-唯一的区别是它是一个不同的文件。我不明白为什么会这样——有什么想法吗?我想了解可能发生的情况,以便将来避免出现问题。

可能尝试将所有文件读取为字符串,然后使用json.loads

         def yourfunc():
             file = open('map.txt')
             json_string = file.read()
             map = json.loads(json_string)

以下解决方案对您有效吗

import json
f = open("map.txt")
map = json.loads(f.read())

这不是一个真正的答案。一些示例代码可能更有用helpful@John已经添加了!如果我将您的JSON内容复制到一个文件中,并在Python2.7中使用
JSON.load(file('blah.txt'))
加载它,它就可以正常工作。如果我将它复制到Python3中并使用
json.loads(“'blah blah”“”)
它就可以工作了。奇怪的我不得不猜测它可能引用了错误的文件(名称中的拼写错误),或者该文件保存在一个奇怪的编辑器/编码中,使得它的解释不同?@TessellingEckler我将其保存在TextEdit中,并确保它是纯文本。文件名也绝对正确:(根据跟踪,肯定有更多的代码不仅仅是@shinytinsmile,它可能是由其他代码行引起的,而不一定是在您给我们的这段代码中。因为您的代码可以工作,所以您给了我们一个要点。我注意到错误中说
MAP\u list=json.load(f2)
在您的代码示例中,它被称为
f1
-您是否打开了正确的文件名,但随后传递了json.load一个不同的文件变量?它可能是一个不寻常的空白('\r\n')或('\t')也许吧。经常在emacs中打开文件可以突出显示这些不寻常的空白,这些空白可以被一些windows应用程序注入。
import json
f = open("map.txt")
map = json.loads(f.read())