json.loads处理文本报错 json.decoder.JSONDecodeError:expecting value: line1 column 2
- 报错信息
- 待处理的文本
- 解决方法
- 错误原因
- json用法
- 主要的区别
报错信息
json.decoder.JSONDecodeError: expecting value: line1 column 2 (char 1)
待处理的文本
content = “[‘单词1’, ‘单词2’]”
解决方法
将原来的处理方法
text = json.loads(content)替换为eval
text = eval(content)
错误原因
这个错误是因为在解析JSON数据时发生了问题。JSONDecodeError表示解码器期望在特定位置找到一个有效的JSON值,但实际上找到了无效的字符或者缺少了值。但是正常情况下json是可以解析数组的,由此我推测该问题可能与单引号和双引号有关系。
于是验证一下,果然是这样:
>>> import json
>>> content = "['text1', 'text2']"
>>> print(json.loads(content))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
>>> content = '["text1", "text2"]'
>>> print(json.loads(content))
['text1', 'text2']
>>>
json用法
-
json.dumps():用于将 Python 对象序列化为 JSON 字符串。它接受一个 Python 对象作为参数,并返回一个对应的 JSON 字符串。例如,json.dumps(obj) 可以将一个 Python 字典或列表转换为 JSON 字符串。
-
json.dump():与 json.dumps() 类似,但是它将序列化的 JSON 数据直接写入文件(或类文件对象)。它接受两个参数:要序列化的 Python 对象和要写入的文件(或类文件对象)。例如,json.dump(obj, file) 将 Python 对象序列化为 JSON 字符串,并将其写入文件中。
-
json.loads():用于将 JSON 字符串解析为 Python 对象。它接受一个 JSON 字符串作为参数,并返回一个对应的 Python 对象。例如,json.loads(json_str) 将一个 JSON 字符串解析为 Python 字典或列表。
-
json.load():与 json.loads() 类似,但是它从文件(或类文件对象)中读取 JSON 数据,并将其解析为 Python 对象。它接受一个文件(或类文件对象)作为参数,并返回解析后的 Python 对象。例如,json.load(file) 从文件中读取 JSON 字符串,并将其解析为 Python 对象。
主要的区别
dumps() 和 loads() 是将 JSON 数据与 Python 对象之间进行转换的函数,可以在内存中直接操作 JSON 字符串和 Python 对象。
dump() 和 load() 则是在文件(或类文件对象)上直接进行读写操作,将 JSON 数据与文件进行交互。