尝试读取和查询JSON文件时出现Python错误
我正在尝试编写一个Python函数,作为我工作的一部分,以便能够检查JSON文件中是否存在数据,而我只能从网站下载数据。我是这里唯一有编码或脚本编写经验(HTML、CSS和SQL)的资源,所以这件事就落在我的肩上了。到目前为止,我还没有Python方面的经验 我不允许更改JSON文件的结构或格式,其格式为:尝试读取和查询JSON文件时出现Python错误,python,json,Python,Json,我正在尝试编写一个Python函数,作为我工作的一部分,以便能够检查JSON文件中是否存在数据,而我只能从网站下载数据。我是这里唯一有编码或脚本编写经验(HTML、CSS和SQL)的资源,所以这件事就落在我的肩上了。到目前为止,我还没有Python方面的经验 我不允许更改JSON文件的结构或格式,其格式为: { "naglowek": { "dataGenerowaniaDanych": "20210514",
{
"naglowek": {
"dataGenerowaniaDanych": "20210514",
"liczbaTransformacji": "5000",
"schemat": "RRRRMMDDNNNNNNNNNNBBBBBBBBBBBBBBBBBBBBBBBBBB"
},
"skrotyPodatnikowCzynnych": [
"examplestring1",
"examplestring2",
"examplestring3",
"examplestring4",
],
"maski": [
"examplemask1",
"examplemask2",
"examplemask3",
"examplemask4"
]
}
我尝试了许多在网上找到的例子,但没有一个有效。通过查看各种网站,我得到的Python代码是:
import json
with open('20210514.json') as myfile:
data = json.load(myfile)
print(data)
keyVal = 'examplestring2'
if keyVal in data:
# Print the success message and the value of the key
print("Data is found in JSON data")
else:
# Print the message if the value does not exist
print("Data is not found in JSON data")
但我在下面看到了这些错误,我是Python的新手,所以在破译它们时遇到了困难:
D:\PycharmProjects\venv\Scripts\python.exe D:/PycharmProjects/json_test.py
Traceback (most recent call last):
File "D:\PycharmProjects\json_test.py", line 4, in <module>
data = json.load(myfile)
File "C:\Users\xyz\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 293, in load
return loads(fp.read(),
File "C:\Users\xyz\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "C:\Users\xyz\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\xyz\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 12 column 5 (char 921)
Process finished with exit code 1
D:\PycharmProjects\venv\Scripts\python.exe D:/PycharmProjects/json\u test.py
回溯(最近一次呼叫最后一次):
文件“D:\PycharmProjects\json_test.py”,第4行,在
data=json.load(myfile)
文件“C:\Users\xyz\AppData\Local\Programs\Python\Python39\lib\json\\uuuuu init\uuuu.py”,第293行,已加载
返回加载(fp.read(),
文件“C:\Users\xyz\AppData\Local\Programs\Python\39\lib\json\\ uu_init\u_uuu.py”,第346行,在loads中
返回\u默认\u解码器。解码
文件“C:\Users\xyz\AppData\Local\Programs\Python\Python39\lib\json\decoder.py”,第337行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
文件“C:\Users\xyz\AppData\Local\Programs\Python\Python39\lib\json\decoder.py”,第355行,原始解码
从None引发JSONDecodeError(“预期值”,s,err.value)
json.decoder.JSONDecodeError:期望值:第12行第5列(char 921)
进程已完成,退出代码为1
任何帮助都将不胜感激
{
"naglowek": {
"dataGenerowaniaDanych": "20210514",
"liczbaTransformacji": "5000",
"schemat": "RRRRMMDDNNNNNNNNNNBBBBBBBBBBBBBBBBBBBBBBBBBB"
},
"skrotyPodatnikowCzynnych": [
"examplestring1",
"examplestring2",
"examplestring3",
"examplestring4"
],
"maski": [
"examplemask1",
"examplemask2",
"examplemask3",
"examplemask4"
]
}
这应该行得通。这里的问题是,在列表末尾有一个逗号,而解析器无法处理。ECMAScript 5引入了解析该逗号的功能。但显然,JSON一般不支持它(还?)。因此,请确保列表末尾没有逗号
要使if-else语句正确,必须将其更改为以下内容:
keyVal = 'examplestring2'
keyName = 'skrotyPodatnikowCzynnych'
if keyName in data.keys() and keyval in data[keyName]:
# Print the success message and the value of the key
print("Data is found in JSON data")
else:
# Print the message if the value does not exist
print("Data is not found in JSON data")
删除尾随逗号。不允许尾随逗号如果不想更改文件结构,则必须执行以下操作:
import yaml
with open('20210514.json') as myfile:
data = yaml.load(myfile, Loader=yaml.FullLoader)
print(data)
您还需要首先安装yaml。
似乎对
“examplestring4”后面的逗号不满意
。如果删除它,您可能会更幸运。感谢您迄今为止给出的答案。删除逗号让我更接近了一步,但即使我要查找的字符串在那里,它也会返回语句的其他部分,表示找不到值。只有在我查找键“skrotypodatnikowczynych”时,它才起作用,而不是该键中的值。很明显,您不是将字符串与字符串进行比较,而是将字典与字符串进行比较。我将编辑我的答案,让它反映我的意思。