如何从嵌套JSON中提取指定字段值并赋值?附解析逻辑
嵌套JSON解析提取字段方案
解析逻辑详解
咱们像剥洋葱一样,一层一层拆解这个嵌套JSON的结构:
- 找入口:整个JSON是一个对象,核心目标数据藏在
customFields数组里,第一步先拿到这个数组。 - 定位目标分组:在
customFields里,找name为"Cases"(或者fieldId为1111111)的元素——所有包含AAAA、BBBB的case数据都在这里面。 - 拆Case数组:这个目标元素的
values是个二维数组(数组套数组),每个子数组里装着一个单独的Case对象。 - 提目标字段:每个Case对象的
values数组里,有一个包含AAAA和BBBB的对象,直接从中取出这两个字段的值,分别存入对应的列表即可。
代码实现(Python)
先把JSON转成Python字典,再按上面的逻辑提取:
# 原始JSON数据转成Python字典 data = { "id": 1234, "name": "xxxx", "description": "XXXXY", "descriptionFormat": "XZXZ", "children": [], "customFields": [ {"fieldId": 1111,"name": "dert","values": [{"id": 45,"name": "est","type": "erence"}],"type": "alue"}, {"fieldId": 1114,"name": "name_pe","values": [{"id": 423255,"name": "CN","type": "eference","referenceData": {"ropagation": "ATE"},"euse": false}],"type": "alue"}, {"fieldId": 1111111,"name": "Cases","values": [ [{"fieldId": 111121,"name": "Case","values": [{"AAAA": 9090,"BBBB": "MONACO","ype": "eference","referenceData": {"ropagation": "ATE"},"euse": false}],"ames": [],"type": "alue"}], [{"fieldId": 111122,"name": "Case","values": [{"AAAA": 9091,"BBBB": "NICE","ype": "eference","ata": {"ropagation": "ATE"},"euse": false}],"ames": [],"ype": "alue"}] ]} ] } # 初始化结果列表 List_AAAA = [] List_BBBB = [] # 1. 遍历customFields,找到Cases分组 for field in data['customFields']: if field['name'] == 'Cases': # 2. 遍历Cases下的二维values数组 for case_group in field['values']: # 每个case_group是一个数组,取出里面的Case对象 case_obj = case_group[0] # 3. 从Case对象的values里取出目标数据 target_data = case_obj['values'][0] # 4. 提取字段并添加到列表 List_AAAA.append(target_data['AAAA']) List_BBBB.append(target_data['BBBB']) break # 找到目标分组后停止遍历 # 输出结果 print("List_AAAA =", List_AAAA) # 输出:List_AAAA = [9090, 9091] print("List_BBBB =", List_BBBB) # 输出:List_BBBB = ['MONACO', 'NICE']
关键细节说明
- 用
name == 'Cases'定位更稳妥,因为fieldId可能随业务调整,但业务名称Cases一般不会变;当然用fieldId == 1111111也能定位,按需选择。 - 处理二维数组时,
field['values']是[[case1], [case2]]的结构,所以要先遍历外层数组,再取每个子数组的第一个元素(每个子数组里只有一个Case对象)。 - 如果怕数据结构异常,可加容错判断(比如
if 'values' in case_obj),避免出现KeyError;如果数据结构固定,这一步可以省略。
内容的提问来源于stack exchange,提问作者Shruthi
相关产品推荐
相关产品推荐

