如何用Python遍历字典套列表套字典结构并提取自定义字段值
解决方案
你的问题核心是原始数据中的自定义字段值是包裹在列表里的JSON字符串,直接当作字典遍历必然报错,得先解析这个JSON字符串,再提取需要的字段。
步骤说明
- 识别数据结构:
customfield_10067的值是一个列表,列表内的元素是JSON格式字符串,不是现成的字典。 - 解析JSON字符串:用
json.loads()将字符串转换为Python字典。 - 提取目标字段:从解析后的字典的
value键中,取出workspaceId、objectId、id三个字段。 - 构建最终字典:将处理后的值映射回原字段名。
完整代码示例
import json # 模拟你的request.data中的原始结构 raw_data = { u'customfield_10067': [ u'{"field_type":"cmdb-object-cftype","value":{"workspaceId":"dsjahdjasf-61f7-4421-9ced-df122a122d603","name":"test","objectId":"14","id":"dsjahdjasf-61f7-4421-9ced-df122a122d603:14"}}' ] } result = {} for field, value_list in raw_data.items(): if "custom" in field: # 取出列表中的JSON字符串并解析 json_str = value_list[0] parsed_data = json.loads(json_str) # 提取需要的字段并组装 target_value = { "workspaceId": parsed_data["value"]["workspaceId"], "objectId": parsed_data["value"]["objectId"], "id": parsed_data["value"]["id"] } result[field] = target_value print(result)
输出结果
{ 'customfield_10067': { 'workspaceId': 'dsjahdjasf-61f7-4421-9ced-df122a122d603', 'objectId': '14', 'id': 'dsjahdjasf-61f7-4421-9ced-df122a122d603:14' } }
你原有代码的问题
custom_fields是列表,直接用dict(custom_fields)会报错,因为列表转字典要求元素是键值对元组。- 未处理列表中的JSON字符串,直接将字符串当作字典遍历,自然会出现索引错误或序列化错误。
内容的提问来源于stack exchange,提问作者abhinav
相关产品推荐
相关产品推荐

