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

Python多列表JSON处理异常:嵌套列表加载时报JSONDecodeError

嘿,我来帮你搞定这个JSON解码错误!首先,咱们先拆解一下问题:你说单列表序列化反序列化没问题,但嵌套列表就报JSONDecodeError: Expecting value: line 1 column 1 (char 0),这个错误的核心是传给json.loads()的字符串是空的,或者开头不是有效的JSON格式。

先给你看个正常运行的例子,你的代码逻辑本身是没问题的:

import json

data = [["a","b","c"],["1","2","3"]]
data2 = str.encode(json.dumps(data))
st = bytes.decode(data2)
msg = json.loads(st)
print(msg)  # 输出: [['a', 'b', 'c'], ['1', '2', '3']]

那问题大概率出在实际场景的细节里,给你几个排查和解决的方向:

1. 先确认st的实际内容

在调用json.loads(st)之前,赶紧打印一下st的值:

print("st的内容:", repr(st))
  • 如果输出是''(空字符串):那说明data2是空字节串,往前查json.dumps(data)为什么返回空——大概率是你的data生成有问题(比如从数据库追加列表时出错,导致data是空或者无效)。
  • 如果输出是类似"b'[["a","b","c"],["1","2","3"]]'":这说明你错误地把字节串的repr结果当成了要解码的内容(比如保存data2时用了repr(data2)而不是直接存字节),这种情况下直接用data2给json.loads()就行(Python3.6+支持直接加载字节串)。

2. 检查data的结构和元素类型

JSON只能序列化特定类型:字符串、数字、列表、字典、布尔值、None。如果你的嵌套列表里藏了非JSON支持的类型(比如数据库返回的datetime对象、bytes字节串、自定义类实例),json.dumps()虽然可能不会直接报错,但生成的字符串可能异常,或者在某些情况下导致后续解码失败。

比如如果data里有bytes元素:

data = [["a", b"b"], ["1","2"]]
# 这时候json.dumps(data)会直接抛出TypeError,因为bytes不能被序列化

你可以先遍历data检查所有元素类型,确保都是JSON友好的。

3. 简化你的序列化反序列化流程

其实你完全可以省去手动encode和decode的步骤,因为:

  • Python3.6+的json.loads()直接支持传入字节串,所以可以直接写:
data2 = json.dumps(data).encode()
msg = json.loads(data2)
  • 如果你只是要深拷贝这个列表,甚至不需要JSON转一圈,直接用copy.deepcopy(data)更高效。

4. 排查Python版本差异

如果你用的是Python2,注意str和unicode的区别:json.dumps(data)返回的是str类型(字节串),不需要再调用str.encode(),否则会导致双重编码,解码后得到的字符串可能包含额外的转义,最终引发解码错误。Python2下直接这么写就行:

import json
data = [["a","b","c"],["1","2","3"]]
st = json.dumps(data)
msg = json.loads(st)

按照这些步骤排查,应该能快速定位问题所在!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:02:29