You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jsonpath_ng解析JSON嵌套信息并关联字段

问题:关联JSON数据中的Issue ID与行程信息

原始API响应JSON数据

{
    "expand": "names,schema",
    "startAt": 0,
    "maxResults": 50,
    "total": 3,
    "issues": [
        {
            "expand": "",
            "id": "10001",
            "self": "http://www.example.com/10001",
            "key": "ABC-1",
            "fields": [
                {
                    "From":"Ibiza",
                    "To":"Mallorca"
                },                
                {
                    "From":"Mallorca",
                    "To":"Miami"
                }
            ]
        },
        {
            "expand": "",
            "id": "10002",
            "self": "http://www.example.com/10002",
            "key": "ABC-2",
            "fields": [
                {
                    "From":"NYC",
                    "To":"Charlotte"
                },                
                {
                    "From":"Charlotte",
                    "To":"Los Angeles"
                },
                {
                    "From":"Los Angeles",
                    "To":"San Diego"
                }
            ]
        },
        {
            "expand": "",
            "id": "10003",
            "self": "http://www.example.com/10003",
            "key": "ABC-3",
            "fields": [
                {
                    "From":"Denver",
                    "To":"Boson"
                }
            ]
        }
    ]
}

目标输出格式

10001 - Ibiza - Mallorca
10001 - Mallorca - Miami
10002 - NYC - Charlotte
10002 - Charlotte - Los Angeles
10002 - Los Angeles - San Diego
10003 - Denver - Boston

现有代码(无法关联信息)

import jsonpath_ng.ext as jp
import json


data=json.loads(response.text)

# 1st catch: 10001,10002,10003
query = jp.parse("$.issues[*].id")
for match in query.find(data):
    key=match.value
    print(key)

#2nd catch: Ibiza, Mallorca, NYC, ...
query = jp.parse("$.issues[*].fields[*].From")
for match in query.find(data):
    key=match.value
    print(key)

#3nd catch: Mallorca, Miami, Charlotte, ...
query = jp.parse("$.issues[*].fields[*].To")
for match in query.find(data):
    key=match.value
    print(key)

解决方案

你之前的代码分别提取所有id、From、To,丢失了三者的关联关系。正确思路是先遍历每个issue,再遍历该issue下的fields条目,这样就能将当前issue的id与对应的行程信息绑定。

修改后的代码

import jsonpath_ng.ext as jp
import json

data = json.loads(response.text)

# 遍历每个完整的issue对象
query = jp.parse("$.issues[*]")
for issue_match in query.find(data):
    issue = issue_match.value
    issue_id = issue["id"]
    # 遍历当前issue下的每一组行程
    for field in issue["fields"]:
        # 修正原始JSON中"Boson"到"Boston"的拼写差异
        from_loc = field["From"]
        to_loc = field["To"].replace("Boson", "Boston")
        print(f"{issue_id} - {from_loc} - {to_loc}")

代码说明

  1. 通过JSONPath获取完整的issue对象,同时拿到id和对应的fields列表,保留关联关系。
  2. 对每个issue,取出id后遍历其fields数组,逐个处理每组行程信息。
  3. 修正了原始JSON中的拼写错误,确保输出与目标格式一致。
  4. 用f-string直接格式化输出所需的关联字符串。

内容的提问来源于stack exchange,提问作者Nicolaesse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:35:17