从URL导入JSON提示存在多余字符的技术求助
问题诊断与解决方案
你遇到的「多余字符」错误,核心原因是目标URL返回的JSON数据里嵌套了不符合JSON规范的字符串化内容——那些"s"字段的值,是把本该是JSON对象/数组的内容用单引号拼接成了字符串,完全违反了JSON的语法规则(JSON要求键值必须用双引号,对象/数组不能被引号包裹成字符串)。
看你提供的JSON片段就能发现问题:
{"id":{"s":"2"},"managingOrganization":{"s":"{'reference': 'Organization/hl7'}"},"address":{"s":"[{'use': 'home', 'line': ['2222 Home Street']}]"},"name":{"s":"[{'use': 'official', 'family': 'Everyman', 'given': ['Adam']}]"},"t...
比如managingOrganization的s值,是一个用单引号包裹的对象字符串,json.loads()解析时会把单引号判定为非法字符,直接抛出错误。
修复代码示例
我们需要先解析外层合法的JSON,再把嵌套的字符串化内容转换成合法的JSON结构,具体代码如下:
import requests import json # 获取原始响应文本 resp = requests.get("https://s3-us-west-2.amazonaws.com/anand-fhir-json/2e3b7aa0-0c90-4b31-8967-680f1438e03e") outer_data = json.loads(resp.text) # 遍历处理每个嵌套的字符串化字段 for field_key, field_value in outer_data.items(): # 只处理包含"s"键的字典类型字段 if isinstance(field_value, dict) and "s" in field_value: raw_str = field_value["s"] # 把单引号替换成双引号,符合JSON语法要求 normalized_str = raw_str.replace("'", '"') try: # 尝试将字符串解析为JSON对象/数组 parsed_inner = json.loads(normalized_str) outer_data[field_key] = parsed_inner except json.JSONDecodeError: # 如果是纯字符串(比如id的"2"),直接保留原内容 outer_data[field_key] = raw_str # 现在可以正常输出处理后的数据了 print(outer_data)
额外提示
如果这个JSON是你自己生成的,建议从源头优化:直接输出合法的嵌套JSON结构,不要把对象/数组转成带单引号的字符串,这样就能彻底避免这类解析错误。
内容的提问来源于stack exchange,提问作者Anand
相关产品推荐
相关产品推荐

