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

Python解析JSON遇JSONDecodeError,请求协助排查问题

解决JSONDecodeError: Expecting value: line 1 column 1 (char 0)的问题

我来帮你排查这个头疼的JSON解析问题——这个错误提示看起来有点误导人(说第1行有问题),但结合你描述的“前1400行能解析、50万行文件在1400行左右报错”的情况,大概率是文件格式或者解析方式的问题,下面分几种情况给你解决方案:

1. 最可能的原因:你的文件是JSON Lines格式,而非单个JSON数组

你给出的JSON片段是一个独立的对象,而如果你的50万行文件是每行一个独立JSON对象(也就是JSON Lines格式,常见于日志或批量导出的数据),那用json.load(f)一次性加载整个文件就会报错——因为json.load要求整个文件是一个完整的JSON结构(要么是单个对象,要么是用[]包裹的数组),而多个独立对象直接堆叠是不合法的JSON。

你之前只解析前1400行能成功,可能是你误将前1400行整理成了合法的数组,或者刚好前1400行是一个完整的单个JSON对象?不管怎样,改成逐行解析的方式就能解决这个问题,代码如下:

import json

file_list = ['filename.txt']  # insert filename(s) here

for filename in file_list:
    # 指定编码避免乱码问题,utf-8-sig可处理带BOM的文件
    with open(filename, 'r', encoding='utf-8-sig') as f:
        # 遍历每一行,同时记录行号方便定位错误
        for line_num, line in enumerate(f, 1):
            stripped_line = line.strip()
            if not stripped_line:
                continue  # 跳过空行
            
            try:
                distro = json.loads(stripped_line)
                # 输出你需要的字段
                print(
                    distro['name'],
                    distro['positionTS'],
                    distro['smoothedPosition'][0],
                    distro['smoothedPosition'][1],
                    distro['smoothedPosition'][2]
                )
            except json.JSONDecodeError as e:
                # 捕获错误并打印行号和内容,方便排查
                print(f"⚠️ 第 {line_num} 行解析失败: {e}")
                print(f"该行内容: {stripped_line[:100]}...")  # 只打印前100字符避免刷屏
                # 如果想遇到错误就停止,取消下面的注释
                # break

2. 检查文件编码或隐藏字符

有时候文件会带有不可见的控制字符(比如UTF-8 BOM、奇怪的换行符),导致解析器无法识别开头的内容,从而抛出“第1列无值”的错误。你可以:

  • 打开文件时指定encoding='utf-8-sig'(如上面代码所示),自动处理BOM;
  • 用文本编辑器(比如VS Code)打开文件,开启“显示所有字符”(VS Code:视图 > 切换渲染空白字符),查看1400行左右是否有奇怪的字符(比如\r、不可见的控制码)。

3. 验证1400行附近的JSON格式

如果逐行解析还是在1400行报错,那大概率是该行的JSON语法有问题。你可以:

  • 把1400行附近的内容复制出来,保存成一个小文件;
  • 用Python自带的JSON校验工具验证:python -m json.tool < 你的小文件.json,如果有语法错误,工具会直接提示位置;
  • 检查是否有引号不匹配、逗号缺失、括号未闭合等问题(比如字符串里的引号没有转义,或者数组最后一个元素后面多了逗号)。

关于数据类型差异的疑问

你提到的叉车/固定设备数据结构一致的问题,一般不会导致JSONDecodeError——只要结构是合法JSON,解析器不会因为内容含义不同报错,只会在你访问不存在的字段时抛出KeyError,所以这个应该不是当前问题的原因。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:10:06