请求技术协助:通过Python解析响应提取ActivationId和ActivationCode作为后续处理变量
Python解析字典提取指定字段值
这很容易实现,分两种情况来处理,取决于你的输出是字符串形式还是已经是Python字典对象:
情况1:输出是带单引号的字符串形式
如果你的输出是像题目里那样的字符串(用单引号包裹的字典格式),可以用ast.literal_eval来安全地将其转换为Python字典,再提取目标字段:
import ast # 原始输出字符串 response_str = """{ 'ActivationId': '24d8bac5-b849-42b2-b996-ca15fd829826', 'ActivationCode': 'jLu1oMmFGhZ/HQFGPr9P', 'ResponseMetadata': { 'RequestId': '7fc216f9-4c62-4b49-a17d-57c865f439ec', 'HTTPStatusCode': 200, 'HTTPHeaders': { 'server': 'Server', 'date': 'Mon, 30 Aug 2021 09:58:39 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '95', 'connection': 'keep-alive', 'x-amzn-requestid': '7fc216f9-4c62-4b49-a17d-57c865f439ec' }, 'RetryAttempts': 0 } }""" # 解析字符串为Python字典(用ast.literal_eval比eval更安全) response_dict = ast.literal_eval(response_str) # 提取需要的两个值作为变量 id = response_dict['ActivationId'] code = response_dict['ActivationCode'] # 验证结果(后续处理直接用id和code即可) print(f"id={id}") print(f"code={code}")
情况2:输出已经是Python字典对象
如果这个输出是直接从AWS SDK(比如boto3)返回的响应,那么它本身就是一个Python字典,不需要解析字符串,直接提取键值对即可:
# 假设这是API返回的字典对象 response_dict = { 'ActivationId': '24d8bac5-b849-42b2-b996-ca15fd829826', 'ActivationCode': 'jLu1oMmFGhZ/HQFGPr9P', 'ResponseMetadata': { 'RequestId': '7fc216f9-4c62-4b49-a17d-57c865f439ec', 'HTTPStatusCode': 200, 'HTTPHeaders': { 'server': 'Server', 'date': 'Mon, 30 Aug 2021 09:58:39 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '95', 'connection': 'keep-alive', 'x-amzn-requestid': '7fc216f9-4c62-4b49-a17d-57c865f439ec' }, 'RetryAttempts': 0 } } # 直接提取目标字段 id = response_dict['ActivationId'] code = response_dict['ActivationCode'] # 后续处理使用这两个变量 print(f"id={id}") print(f"code={code}")
注意事项
- 推荐使用
ast.literal_eval而非eval来解析字符串字典,因为eval会执行任意代码,存在安全风险,而ast.literal_eval仅解析合法的Python字面量,更安全。 - 如果字段可能不存在,可以用
response_dict.get('ActivationId')来避免KeyError,返回None或者指定默认值,比如response_dict.get('ActivationId', 'default_id')。
内容的提问来源于stack exchange,提问作者Pety
相关产品推荐
相关产品推荐

