我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python错误JSONDecodeError: Expecting value: line 1 column 1怎么解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python错误JSONDecodeError: Expecting value: line 1 column 1怎么解决

这篇文章主要讲解了“Python错误JSONDecodeError: Expecting value: line 1 column 1怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python错误JSONDecodeError: Expecting value: line 1 column 1怎么解决”吧!

Python“json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) ”发生在我们试图解析一些无效的 JSON 时。

要解决该错误,请确保响应或文件不为空,或者在解析之前有条件地检查内容类型。

尝试解析空字符串会导致错误

这是一个非常简单的示例,说明错误是如何发生的。

import json# ⛔️ json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)result = json.loads('')

Python错误JSONDecodeError: Expecting value: line 1 column 1怎么解决

我们试图将一个空字符串当作有效的 JSON 来解析。

错误的常见原因

最常见的错误原因是:

  • 尝试解析无效的 JSON 值(例如单引号或尾随逗号)。

  • 从远程服务器(例如 204 或 404)获取空响应并尝试将其作为 JSON 进行解析。

  • 尝试像解析 JSON 一样解析具有不同内容类型(例如文本/html)的响应。

  • 尝试错误地读取 JSON 文件或尝试解析空 JSON 文件的内容。

尝试解析无效的 JSON 值

下面是一个存储无效 JSON 的文件示例。

example.json

{  "id": 1,  'name': "Alice",  "age": 30,  "country": "Austria"}

请注意 ,名称属性用单引号引起来。

这会使 JSON 无效,并且尝试从文件中读取会导致错误。

import jsonfile_name = 'example.json'# ⛔️ json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 3 column 3 (char 15)with open(file_name, 'r', encoding='utf-8') as f:    my_data = json.load(f)    print(my_data)

要解决该错误,需要确保将 JSON 中的所有键和字符串值用双引号引起来。

example.json

{  "id": 1,  "name": "Alice",  "age": 30,  "country": "Austria"}

现在 name 键用双引号括起来,我们可以安全地从文件中读取。

# ✅ works as expectedimport jsonfile_name = 'example.json'with open(file_name, 'r', encoding='utf-8') as f:    my_data = json.load(f)    # ????️ {'id': 1, 'name': 'Alice', 'age': 30, 'country': 'Austria'}    print(my_data)    print(my_data['name'])  # ????️ Alice

确保在打开文件时设置编码关键字参数(如上面的代码示例所示)。

忘记用引号括起属性或字符串值

以下是无效和有效 JSON 值的一些示例。

example.json

// ⛔️ 无效的 JSON(忘记引用属性){  "name": "Alice",  age: 30}

对象中的 age 属性未用双引号引起来,这使得 JSON 无效。

example.json

// ✅ 有效的 JSON(所有属性都用双引号引起来){  "name": "Alice",  "age": 30}

示例中的 JSON 是有效的,因为所有属性和字符串值都用双引号引起来。

对属性或值使用单引号而不是双引号

确保没有属性或字符串值用单引号引起来。

example.json

// ⛔️ 无效的 JSON(用单引号引起来的名称属性){  'name': "Alice",  "age": 30}

示例中的名称属性用单引号引起来,这使得 JSON 无效。

永远不要在 JSON 中使用单引号。 属性名称和字符串值必须用双引号引起来。

example.json

// ✅ 有效的 JSON(属性名称和值用双引号引起来){  "name": "Alice",  "age": 30}

确保你没有尾随逗号

在数组的最后一个元素或最后一个键值对之后有尾随逗号会使我们的 JSON 无效。

example.json

// ⛔️ 无效的 JSON(最后一个属性后的尾随逗号){  "name": "Alice",  "age": 30,  ????️ 这个逗号使它无效 JSON}

请注意 ,在 age 属性之后有一个尾随逗号。

这会使 JSON 无效,因为不允许使用尾随逗号。

要解决该错误,请确保删除所有结尾的逗号。

example.json

// ✅ 有效的 JSON(没有尾随逗号){  "name": "Alice",  "age": 30}

发出 HTTP 请求时得到空响应

如果我们在发出 API 请求时遇到错误,请确保响应在解析之前具有 application/json 内容类型标头。

import requestsdef make_request():    response = requests.delete('https://example.com/api/users/2')    print('response: ????️', response)  # response: ????️ <Response [204]>    print('response.text: ????️', response.text)  # response.text: ????️ ""    # response.status_code: ????️ 204    print('response.status_code: ????️', response.status_code)    print('response.headers: ????️', response.headers)    if (response.status_code != 204            and 'content-type' in response.headers            and 'application/json' in response.headers['content-type']):        parsed = response.json()        print('✅ parsed response: ????️', parsed)    else:        # ????️ this runs        print('⛔️ conditions not met')make_request()

该示例使用 requests 包并发出 HTTP DELETE 请求,该请求返回 204 状态(无内容)。

尝试像解析 JSON 一样解析空响应会引发 JSONDecodeError,因此我们必须检查:

  • 响应状态不是 204(无内容)。

  • 响应头字典有一个内容类型键。

  • 内容类型键的值为 application/json

这样我们就可以确定服务器在尝试使用 reponse.json() 方法(如果使用请求)或 json.loads(my_json_str) 解析它之前向我们发送了一个有效的 JSON 响应。

确保 API 不会以不正确的 Content-Type 响应

如果服务器向我们发送了一个空响应或响应不是 application/json 类型,我们将收到 JSONDecodeError

我们不能尝试像解析 JSON 一样解析 text/html 或 XML 响应(或空响应)。

尝试读取一个空的 JSON 文件或错误地读取一个 JSON 文件

该错误通常是在以下情况下引起的:

  • 试图错误地读取 JSON 文件。

  • 尝试读取一个空的 JSON 文件。

  • 尝试读取包含无效 JSON 的 JSON 文件。

我们可以使用 json.load() 方法将 JSON 文件反序列化为 Python 对象。

import jsonfile_name = 'example.json'with open(file_name, 'r', encoding='utf-8') as f:    my_data = json.load(f) # ????️ 使用 load() 解析 JSON    print(my_data)  # ????️ {'name': 'Alice', 'age': 30}

该示例假定在同一目录中有一个名为 example.json 的文件。

example.json

{"name": "Alice", "age": 30}

确保我们正在读取的文件不为空,因为这通常会导致错误。

使用 try/except 语句来处理潜在的错误

如果我们的文件可能包含无效的 JSON,请使用 try/except 语句来处理错误。

假设我们有以下 JSON 文件。

example.json

 {   "name": "Alice",   'age': 30 }

请注意,age 属性是单引号的,这使得 JSON 无效。

下面是我们如何使用 try/except 语句来处理错误。

import jsonfile_name = 'example.json'with open(file_name, 'r', encoding='utf-8') as f:    try:        my_data = json.load(f)  # ????️ 使用 load() 解析 JSON        print(my_data)    except BaseException as e:        print('The file contains invalid JSON')

我们尝试从文件中解析 JSON 数据,但文件包含无效的 JSON,因此引发异常,然后在 except 块中处理。

确保不将文件路径传递给 json.loads()

错误的另一个常见原因是在尝试从 JSON 文件读取时将文件路径传递给 json.loads() 方法。

import jsonfile_name = 'example.json'with open(file_name, 'r', encoding='utf-8') as f:    # ⛔️ json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)    my_data = json.loads(file_name) # ????️ incorrectly passed file path    print(my_data)  # ????️ {'name': 'Alice', 'age': 30}

json.load 方法用于将文件反序列化为 Python 对象,而 json.loads 方法用于将 JSON 字符串反序列化为 Python 对象。

import jsonfile_name = 'example.json'with open(file_name, 'r', encoding='utf-8') as f:    my_data = json.load(f) # ✅ 将文件对象传递给 json.load()    print(my_data)  # ????️ {'name': 'Alice', 'age': 30}

json.load() 方法需要一个包含实现 .read() 方法的 JSON 文档的文本文件或二进制文件。

使用 json.loads() 手动调用 read() 方法

或者,我们可以手动调用文件对象的 read() 方法并使用 json.loads() 方法。

import jsonfile_name = 'example.json'with open(file_name, 'r', encoding='utf-8') as f:    # ????️ 确保调用 read()    my_data = json.loads(f.read())    print(my_data)  # ????️ {'name': 'Alice', 'age': 30}    print(type(my_data))  # ????️ <class 'dict'>

上面的示例实现了相同的结果,但是我们没有依赖 json.load() 方法为我们调用文件对象上的 read() ,而是手动执行它并使用 json.loads() 方法。

json.loads() 方法基本上帮助我们从 JSON 字符串加载 Python 本机对象(例如字典或列表)。

在使用 json.loads() 之前尝试让你的 JSON 有效

如果我们需要在使用 json.loads() 方法之前使您的 JSON 有效,我们可以尝试使用 str.replace() 方法。

下面是一个示例 JSON 文件,其中包含使 JSON 无效的单引号属性。

example.json

 {   "name": "Alice",   'age': 30 }

下面是我们如何使用 str.replace() 方法将字符串中的单引号替换为双引号。

import jsonfile_name = 'example.json'with open(file_name, 'r', encoding='utf-8', errors='ignore') as f:    a_str = f.read()    # {    #   "name": "Alice",    #   'age': 30    ????️ note single quotes  # }    print(a_str)    # ✅ 用双引号替换单引号    valid_json = a_str.replace("'", '"')    result = json.loads(valid_json)    print(result)  # {'name': 'Alice', 'age': 30}    print(result['name'])  # Alice    print(result['age'])  # 30

str.replace 方法返回字符串的副本,其中所有出现的子字符串都被提供的替换项替换。

该方法采用以下参数:

  • old 字符串中我们要替换的子串

  • new 替换每次出现的 old

  • count 仅替换第一个 count 出现(可选)

我们使用 replace() 方法将字符串中所有出现的单引号替换为双引号。

这使得 JSON 有效,因此我们可以安全地使用 json.loads() 方法。

JSONEncoder 类默认支持以下对象和类型的转换。

PythonJSON
PythonJSON
dictobject
list, tuplearray
strstring
int、float、int 和 float 派生枚举number
Truetrue
Falsefalse
Nonenull

通常导致错误的事情

最常见的错误原因是:

  • 尝试解析无效的 JSON 值(例如单引号或尾随逗号)。

  • 从远程服务器(例如 204 或 404)获取空响应并尝试将其作为 JSON 进行解析。

  • 尝试像解析 JSON 一样解析具有不同内容类型(例如文本/html)的响应。

  • 尝试错误地读取 JSON 文件或尝试解析空 JSON 文件的内容。

感谢各位的阅读,以上就是“Python错误JSONDecodeError: Expecting value: line 1 column 1怎么解决”的内容了,经过本文的学习后,相信大家对Python错误JSONDecodeError: Expecting value: line 1 column 1怎么解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python错误JSONDecodeError: Expecting value: line 1 column 1怎么解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python错误JSONDecodeError: Expecting value: line 1 column 1怎么解决

这篇文章主要讲解了“Python错误JSONDecodeError: Expecting value: line 1 column 1怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“P
2023-07-05

Python出现File “<stdin>“, line 1非语法错误如何解决

本文小编为大家详细介绍“Python出现File “<stdin>“, line 1非语法错误如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python出现File “<stdin>“, line 1非语法错误如何解决”文章能帮助
2023-07-05

解决Python 出现File “<stdin>“, line 1非语法错误的问题

这篇文章主要介绍了Python 出现File “<stdin>“, line 1非语法错误的解决办法,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录