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

如何从含冒号的request.get返回文本构建Python字典?

解决含特殊字符的类JSON文本转字典问题

这问题我之前处理类似场景时也踩过坑!当字段值里包含冒号这种原本用来分隔键值的字符时,单纯用split(':')肯定会把值拆坏,导致构建字典失败。既然不能用json或urllib这类标准解析库,正则表达式绝对是最合适的替代方案,能精准定位键值对,避开值里的特殊字符。

具体实现方案

我们可以用正则匹配出每个键值对,规则专门针对你的返回文本结构设计:

  • 匹配键:双引号包裹的字符串(键名)
  • 匹配冒号:键和值之间的分隔符
  • 匹配值:要么是双引号包裹的字符串(允许包含冒号、空格等),要么是数字(比如year、id这类字段的值)

对应的正则表达式可以写成:

pattern = r'"([^"]+)":(?:(".*?")|(\d+))'

简单解释下这个正则:

  • "([^"]+)":精准捕获双引号内的键名,排除掉双引号本身
  • :(?:(".*?")|(\d+)):匹配冒号后的值,用非捕获组区分两种情况:双引号包裹的字符串(非贪婪匹配避免跨键值匹配),或者纯数字

然后用这个正则提取所有键值对,再转换成字典:

完整代码示例

import re

# 示例返回文本
response_text = u'[{"name":"File Name 1","year":2012,"id":991,"distance":0}]'
# 先去掉外层的数组括号,取出第一个对象的内容
obj_text = response_text[1:-1]

# 用正则匹配所有键值对
matches = re.findall(r'"([^"]+)":(?:(".*?")|(\d+))', obj_text)

# 构建目标字典
result = {}
for key, str_val, num_val in matches:
    if str_val:
        # 去掉值的首尾双引号
        result[key] = str_val.strip('"')
    else:
        # 数字类型转成int
        result[key] = int(num_val)

print(result)
# 输出: {'name': 'File Name 1', 'year': 2012, 'id': 991, 'distance': 0}

测试第二个带冒号的name字段:

response_text = u'[{"name":"File Name 2: etc","year":2002,"id":773,"distance":0}]'
# 同样处理后,result里的name字段会完整保留"File Name 2: etc"

扩展说明

如果后续你的返回文本出现其他类型的值(比如布尔值true/false),可以在正则的非捕获组里再加一个分支(true|false),然后对应处理布尔类型转换;如果遇到嵌套对象结构,可能需要调整正则或者用递归逻辑处理,但针对当前的扁平结构,这个方案完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:48:57