大家好,所以我试图将一堆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)。 我已经看到了针对相同错误代码的其他解决方案,但是似乎都不是解决方案。是代码问题还是输入问题? 预先感谢
答案 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