You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取JSON文件触发JSONDecodeError:Expecting value: line1 column1

解决JSONDecodeError: Expecting value: line 1 column 1的问题

先看你遇到的回溯错误,核心问题出在你实际运行的代码里误用了json.loads()而非json.load()——虽然你贴的函数代码写的是json.load(rdable),但回溯信息明确显示调用了json.loads(rdable),这是触发错误的直接原因:

  • json.load() 专门用于读取文件对象(比如你用open()打开的rdable)
  • json.loads() 只能接收字符串类型参数,直接传文件对象给它,Python会尝试把文件对象本身当成JSON字符串解析,自然会在第1列就报错找不到合法JSON值。

除了这个直接bug,你的代码还有两个逻辑问题需要修正:

  1. 内层循环里的空列表初始化位置错误:原代码每次遍历一个字典值都会重置空列表,导致最后只保留最后一个邮箱的过滤结果
  2. 邮箱过滤条件逻辑错误:not ('/' in email) or not ('\\' in email) 会把**只要不含/或者不含**的邮箱都保留,这和你想要的「同时不含/和\」的需求不符,应该用and替代or

修正后的完整代码

import json

def clean_email_list_no_slash(json_obj):
    dirty_dict = {}
    with open(json_obj, 'r') as rdable:
        # 用json.load()读取文件对象,而非loads()
        r = json.load(rdable)
        dirty_dict.update(r)
    
    for v in dirty_dict.values():
        # 将空列表移到外层循环,避免每次重置
        filtered_emails = []
        for email in v['email']:
            # 修正逻辑:仅保留同时不含/和\的邮箱
            if '/' not in email and '\\' not in email:
                filtered_emails.append(email)
        v['email'] = filtered_emails
    
    with open(json_obj, 'w') as wtable:
        # 加indent参数让输出的JSON格式化,更易读
        json.dump(dirty_dict, wtable, indent=2)
    print('Done.')

额外检查提示

如果你不确定JSON文件本身是否合法,可以先单独用json.load()测试读取,确认文件没有损坏或编码异常。

内容的提问来源于stack exchange,提问作者user13848261

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:18:08