如何从API响应的customFieldValues嵌套字典列表中提取Age的value值
解决方案
核心逻辑是遍历customFieldValues列表,匹配name为Age的字典项后取对应value值即可,你现在的问题是直接把整个自定义字段列表赋值给了Age字段,没有做筛选。
最简修改方案
用next()生成器表达式直接匹配取值,找不到对应字段时默认返回None避免报错:
json_package = [] for row in json_keys: SID = row['Id'] State = row['address'] # 提取Age字段的核心逻辑 age = next((field['value'] for field in row['customFieldValues'] if field['name'] == 'Age'), None) # 如果需要转为数值类型可以加这行 # age = int(age) if age is not None else None a_key = 'value' Handle = row['contacts'] list_values = [a_list[a_key] for a_list in Handle] string = str(list_values).split(",") data = { 'SID': SID, 'State': State['state'], 'Age' : age, 'Email': strip_characters(string[-1]), } json_package.append(data)
多字段提取优化方案
如果你后续还需要提取其他自定义字段(比如Registration Status、Marital Status等),可以先把自定义字段列表转成键值对字典,不用每次遍历:
json_package = [] for row in json_keys: SID = row['Id'] State = row['address'] # 把自定义字段转成 {字段名: 字段值} 的字典 custom_field_map = {field['name']: field['value'] for field in row['customFieldValues']} # 直接从字典取值即可 age = custom_field_map.get('Age') registration_status = custom_field_map.get('Registration Status') a_key = 'value' Handle = row['contacts'] list_values = [a_list[a_key] for a_list in Handle] string = str(list_values).split(",") data = { 'SID': SID, 'State': State['state'], 'Age' : age, 'RegistrationStatus': registration_status, 'Email': strip_characters(string[-1]), } json_package.append(data)
注意事项
- 从你给出的示例数据来看,Age对应的value是字符串格式的数字
'35',如果需要用于数值计算,自行做类型转换即可 - 示例数据中有一处语法问题:
'value': Yes缺少引号,属于API返回的JSON格式错误,如果实际运行遇到该问题,需要先处理JSON解析异常
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

