如何用JSON Path表达式关联ID解析JSON数据生成表格
JSON Path 关联ID与字段的解决方案
你当前的核心问题是没法把$.data下的键(也就是你提到的ID:2、6、8这类)和对应子对象里的high、highTime、low、lowTime字段关联起来,下面针对不同JSON Path工具给出可行方案:
1. 支持键名提取的工具(如Jayway JsonPath)
这类工具允许直接获取节点的键名,你可以用以下方式提取对应数据:
- 提取所有ID:
$.data.*~(~符号专门用来获取当前节点的键名) - 提取对应ID的
high字段:$.data.*.high - 提取对应ID的
highTime字段:$.data.*.highTime - 提取对应ID的
low字段:$.data.*.low - 提取对应ID的
lowTime字段:$.data.*.lowTime
如果工具支持对象合并,还可以用表达式直接生成包含ID的完整对象:
$.data.*.merge(@, {'id': $~})
(merge是Jayway的扩展函数,用来把当前子对象和包含ID的新对象合并成一个完整对象,方便直接生成表格)
2. .NET环境下用Newtonsoft Json.NET
如果是在.NET里处理,直接遍历属性关联更直观:
JObject data = JObject.Parse(jsonString); var result = data["data"] .Children<JProperty>() .Select(p => new { ID = p.Name, High = p.Value["high"], HighTime = p.Value["highTime"], Low = p.Value["low"], LowTime = p.Value["lowTime"] }) .ToList();
对应的JSON Path辅助提取:
- ID列表:
$.data.@keys - 各字段列表:
$.data.*.high、$.data.*.highTime等,顺序和ID列表一一对应
示例验证
假设你的JSON结构如下:
{ "data": { "2": { "high": 100, "highTime": "2024-01-01", "low": 50, "lowTime": "2024-01-01" }, "6": { "high": 200, "highTime": "2024-01-02", "low": 150, "lowTime": "2024-01-02" }, "8": { "high": 150, "highTime": "2024-01-03", "low": 80, "lowTime": "2024-01-03" } } }
提取后生成的目标表格:
| ID | high | highTime | low | lowTime |
|---|---|---|---|---|
| 2 | 100 | 2024-01-01 | 50 | 2024-01-01 |
| 6 | 200 | 2024-01-02 | 150 | 2024-01-02 |
| 8 | 150 | 2024-01-03 | 80 | 2024-01-03 |
内容的提问来源于stack exchange,提问作者Graham Chandler
相关产品推荐
相关产品推荐

