Python初学者遇JSONDecodeError:增减[]后代码执行成功的疑问
解析JSONDecodeError:方括号
[]的关键作用 嘿,作为刚接触Python的新手,碰到这种因为一个小符号就报错的情况真的挺懵的吧?我来给你把这个问题掰明白~
为什么加了[]就解决了JSONDecodeError?
这个问题的核心是JSON格式的合法性:
- 你最初的代码里,没有
[]的内容大概率是多个JSON对象直接拼接(比如{"pattern":"xxx"}{"pattern":"yyy"}),这种格式不符合JSON规范——JSON要求顶级元素只能是单个对象或者一个数组,多个对象必须用[]包裹成数组。直接解析这种无[]的内容,Python的json模块就会抛出JSONDecodeError。 - 加上
[]之后,内容变成了合法的JSON数组(比如[{"pattern":"xxx"},{"pattern":"yyy"}]),json.loads()就能正常解析成Python列表,自然不会报错了。
关于pattern[0]的差异
你提到两种方式都能获取pattern,但pattern[0]的输出不同,这是因为:
- 不带
[]的合法场景(比如单个对象{"pattern":"xxx"}):解析后得到的是Python字典,你可以通过pattern["pattern"]获取值,但用pattern[0]会报错(因为字典没有索引)。不过你说这种方式也能成功获取pattern,应该是你当时用了键访问而非索引。 - 带
[]的场景:解析后得到的是Python列表,pattern[0]就是列表里的第一个字典对象,打印出来就是完整的{"pattern":"xxx"}这类内容。
直观代码例子
报错的版本(无[]的非法JSON)
import json # 多个对象直接拼接,属于非法JSON格式 raw_data = '{"pattern": "abc123"}{"pattern": "def456"}' try: pattern = json.loads(raw_data) print("print the pattern[0] is:", pattern[0]) except json.JSONDecodeError as e: print(f"报错了:{e}") # 这里会抛出JSONDecodeError
正常运行的版本(加[]的合法JSON)
import json # 用[]包裹成数组,符合JSON规范 raw_data = '[{"pattern": "abc123"}, {"pattern": "def456"}]' pattern = json.loads(raw_data) print("print the pattern[0] is:", pattern[0]) # 输出: {'pattern': 'abc123'}
小建议
以后碰到JSON相关的错误,第一步先把要解析的内容打印出来,检查是否符合JSON的基础规范:
- 顶级元素是对象(
{})或数组([]) - 多个对象必须放在数组里
- 引号、逗号这些符号都要配对正确
内容的提问来源于stack exchange,提问作者VikiWiki
相关产品推荐
相关产品推荐

