Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试读取和查询JSON文件时出现Python错误_Python_Json - Fatal编程技术网

尝试读取和查询JSON文件时出现Python错误

尝试读取和查询JSON文件时出现Python错误,python,json,Python,Json,我正在尝试编写一个Python函数,作为我工作的一部分,以便能够检查JSON文件中是否存在数据,而我只能从网站下载数据。我是这里唯一有编码或脚本编写经验(HTML、CSS和SQL)的资源,所以这件事就落在我的肩上了。到目前为止,我还没有Python方面的经验 我不允许更改JSON文件的结构或格式,其格式为: { "naglowek": { "dataGenerowaniaDanych": "20210514",

我正在尝试编写一个Python函数,作为我工作的一部分,以便能够检查JSON文件中是否存在数据,而我只能从网站下载数据。我是这里唯一有编码或脚本编写经验(HTML、CSS和SQL)的资源,所以这件事就落在我的肩上了。到目前为止,我还没有Python方面的经验

我不允许更改JSON文件的结构或格式,其格式为:

{
    "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”时,它才起作用,而不是该键中的值。很明显,您不是将字符串与字符串进行比较,而是将字典与字符串进行比较。我将编辑我的答案,让它反映我的意思。