如何解析包含动态属性的JSON对象中的嵌套元素
动态ID嵌套JSON的数据流解析方案
针对results.timesheets下动态ID无法固定访问的问题,核心思路是忽略动态键名,直接提取父对象的所有值集合,把键值对结构转为数组后统一处理。以下是几种常见数据流工具的实现方式:
1. Python 自定义脚本解析
如果用Python搭建数据流,直接提取timesheets的所有值即可:
import json # 加载JSON数据(实际场景可从文件/接口读取) raw_json = ''' { "results": { "timesheets": { "135288482": { "id": 135288482, "user_id": 1242515, "jobcode_id": 17288283, "customfields": {"19142": "Item 1", "19144": "Item 2"}, "attached_files": [50692, 44878], "last_modified": "1970-01-01T00:00:00+00:00" }, "135288514": { "id": 135288514, "user_id": 1242509, "jobcode_id": 18080900, "customfields": {"19142": "Item 1", "19144": "Item 2"}, "attached_files": [50692, 44878], "last_modified": "1970-01-01T00:00:00+00:00" } } } } ''' data = json.loads(raw_json) # 提取所有动态ID下的工时单数据,转为列表 timesheet_list = list(data['results']['timesheets'].values()) # 后续可直接遍历列表处理每个工时单 for sheet in timesheet_list: print(f"处理工时单ID: {sheet['id']}")
2. Apache NiFi 可视化数据流处理
用NiFi的JoltTransformJSON处理器,通过Jolt规则把动态键转为数组:
Jolt Shift 规则:
{ "results": { "timesheets": { "*": { "@": "results.timesheet_list[]" } } } }
该规则会把timesheets下所有动态ID对应的值,转移到timesheet_list数组中,之后就能按数组遍历处理每个工时单。
3. Azure Data Factory (ADF) 云端数据流处理
在ADF数据流中两步搞定:
- 先用
解析JSON活动将原始JSON转为结构化数据 - 添加
扁平化活动,选择results.timesheets作为扁平化对象,设置为"拆分为行",这样每个动态ID对应的工时单会变成单独一行,后续直接访问id、user_id等字段即可。
4. Node.js 数据流处理
如果用Node.js构建数据流,同样提取对象值:
const rawData = { "results": { "timesheets": { "135288482": { /* 工时单数据 */ }, "135288514": { /* 工时单数据 */ } } } }; // 提取所有工时单为数组 const timesheetArray = Object.values(rawData.results.timesheets); // 遍历处理 timesheetArray.forEach(sheet => { console.log(`用户ID: ${sheet.user_id}, 工时单ID: ${sheet.id}`); });
内容的提问来源于stack exchange,提问作者user21127551
相关产品推荐
相关产品推荐

