JSONDecodeError:期望值:行file_data = json.loads(file_s)的第1行第1列(char 0)

时间:2018-11-30 15:13:23

标签: python json file load

大家好,所以我试图将一堆json文件加载到程序中,但是每当我尝试运行此代码时:

import json
import os
import sys
import requests

path = r'C:\Users\'
json_files = [pos_json for pos_json in os.listdir(path) if pos_json.endswith('.json')]
print(json_files)
JsonDictionary = {}

struct = {}


try:
    for x in range(len(json_files)):
        Jpath = str(path +'\\'+ json_files[x])
        file = open(Jpath)
        file_s = file.read()
        print("File Read: " + str(file_s))
        file_data = json.loads(file_s) 
    print(Jpath)
    JsonDictionary = json.load(Jpath)

except IOError as e:
    print (e)
    print ('IOError: Unable to open json file. Terminating execution.')
    exit(1)

print (JsonDictionary)

以下是错误输出:

JSONDecodeError                           Traceback (most recent call last)
<ipython-input-80-0333b738997d> in <module>
     24 #          print (sys.exc_info())
     25         print("File Read: " + str(file_s))
---> 26         file_data = json.loads(file_s)
     27     print(Jpath)
     28     JsonDictionary = json.load(Jpath)

~\AppData\Local\conda\conda\envs\tensorkeras2\lib\json\__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    352             parse_int is None and parse_float is None and
    353             parse_constant is None and object_pairs_hook is None and not kw):
--> 354         return _default_decoder.decode(s)
    355     if cls is None:
    356         cls = JSONDecoder

~\AppData\Local\conda\conda\envs\tensorkeras2\lib\json\decoder.py in decode(self, s, _w)
    337 
    338         """
--> 339         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    340         end = _w(s, end).end()
    341         if end != len(s):

~\AppData\Local\conda\conda\envs\tensorkeras2\lib\json\decoder.py in raw_decode(self, s, idx)
    355             obj, end = self.scan_once(s, idx)
    356         except StopIteration as err:
--> 357             raise JSONDecodeError("Expecting value", s, err.value) from None
    358         return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我得到的只是JSONDecodeError:预期值:第1行第1列(字符0)。 我已经看到了针对相同错误代码的其他解决方案,但是似乎都不是解决方案。是代码问题还是输入问题? 预先感谢

1 个答案:

答案 0 :(得分:0)

检查文件是否具有 BOM
右键单击文件>属性>大小。 (例如: 859 个字节) 使用记事本++打开它,然后更改编码(顶部栏菜单)。
如果选择“ UTF-8-BOM”,则它是带有BOM表的文件。否则问题是另一个。 将其更改为“ UTF-8”并保存。
再次检查大小,该大小应少3个字节。 (例如: 856 个字节)。

现在,如果这可以解决问题,则只需使用原始文件,只需添加编码“ utf-8-sig”(而不是默认的“ utf-8”)即可。它将处理BOM(如果存在,则无需检查)。

您可以使用:

open("", "r", encoding="utf-8-sig") # utf-8-sig takes care of BOM