Python将键值对转为排序JSON时遇RunError.JsonParseError的解决咨询
问题分析与修复方案
错误原因
你的代码出现RunError.JsonParseError的核心问题出在输入处理环节,而非JSON序列化步骤:
- 当输入的键值对中
value包含空格时,split(' ')会将value拆分为多个元素,导致key, value = ...解包失败,抛出ValueError,部分测试系统会将这类运行时异常映射为JsonParseError。 - 即使value不含空格,若输入行存在连续空格或首尾空格,
split(' ')会生成空字符串元素,同样会触发解包错误,最终导致JSON序列化流程中断。
修复步骤
1. 修正输入拆分逻辑
将split(' ')替换为split(maxsplit=1),限制仅拆分一次,确保value包含空格时也能正确提取键值:
key, value = input().split(maxsplit=1)
同时移除多余的str(input())——input()本身返回字符串类型,无需二次转换。
2. 可选:添加容错处理(针对异常输入)
如果测试用例存在空行或格式不规范的输入(比如无空格的单行内容),可以添加简单的判断逻辑,避免程序崩溃:
for i in range(n): line = input().strip() if not line: continue # 跳过空行 parts = line.split(maxsplit=1) if len(parts) == 1: key = parts[0] value = "" # 无对应value时设为空字符串 else: key, value = parts dict_[key] = value
修复后的完整代码
import json n = int(input()) dict_ = {} for i in range(n): key, value = input().split(maxsplit=1) dict_[key] = value sorted_by_keys = dict(sorted(dict_.items())) json_object = json.dumps(sorted_by_keys, separators=(',', ':')) print(json_object)
验证说明
修复后的代码可以正确处理包含空格的value,生成的JSON字符串完全符合规范(紧凑格式也是合法JSON,解析器不会因空格问题报错),能够通过测试系统的JSON解析校验。
内容的提问来源于stack exchange,提问作者nnn
相关产品推荐
相关产品推荐

