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

如何用Python匹配字段后获取JSON中对应其他字段的值

问题说明

现有JSON文件、TXT文件及一段Python代码,原代码仅能在TXT设备名称与JSON内termination_a.device.name匹配时打印名称,需修改代码实现匹配时输出对应JSON中的线缆URL(url)和接口URL(termination_a.url),并符合指定输出格式。


现有文件内容

1. JSON文件(test.json)

{
  "results": [
    {
      "url": "https://api.server.com/cables/100/",
      "termination_a": {
        "url": "https://api.server.com/interfaces/250/",
        "device": {
          "url": "https://api.server.com/devices/10/",
          "display": "device-number1-2023-08 myname (1718)",
          "name": "device-number1-2023-08 myname"
        }
      }
    },
    {
      "url": "https://api.server.com/cables/200/",
      "termination_a": {
        "url": "https://api.server.com/interfaces/160/",
        "device": {
          "url": "https://api.server.com/devices/22/",
          "display": "device-number3-2023-08 myname (2245)",
          "name": "device-number3-2023-08 myname"
        }
      }
    },
    {
      "url": "https://api.server.com/cables/300/",
      "termination_a": {
        "url": "https://api.server.com/interfaces/260/",
        "device": {
          "url": "https://api.server.com/devices/73/",
          "display": "device-number8-2023-08 myname (3678)",
          "name": "device-number8-2023-08 myname"
        }
      }
    }
  ]
}

2. TXT文件(test.txt)

this is device-number1-2023-08 myname1 and it is good.
this is device-number8-2023-08 myname8 and it is.
this is device-number3-2023-08 myname3 and it is not good.

3. 原Python代码

import json

with open('test.json', 'r') as j:
    data = json.load(j)

with open('test.txt', 'r') as f:
    for ff in f.readlines():
        ff = ff.split(' ')
        for jj in data['results']:
            jj_name = jj['termination_a']['device']['name']
            ff_name = f'{ff[2]} {ff[3]}'
            if jj_name == ff_name:
                print(f'jj_name --> {jj_name}, ff_name --> {ff_name}')

修改后的代码

import json

with open('test.json', 'r') as j:
    data = json.load(j)

with open('test.txt', 'r') as f:
    for line in f.readlines():
        # 提取TXT中的设备名称
        parts = line.strip().split(' ')
        ff_name = f'{parts[2]} {parts[3]}'
        # 遍历JSON线缆条目
        for item in data['results']:
            jj_name_base = item['termination_a']['device']['name']
            # 适配名称差异:忽略TXT名称末尾的数字后缀
            if ff_name.startswith(jj_name_base):
                cable_url = item['url']
                interface_url = item['termination_a']['url']
                # 按预期格式输出
                print(f'jj_name --> {ff_name}, ii_name --> {ff_name}, url {cable_url}, [\'termination_a\'][\'url\'] --> {interface_url}')

关键调整说明

  1. 匹配逻辑修复:JSON与TXT中的设备名称仅末尾数字后缀不同,使用startswith()实现模糊匹配,确保两者正确关联。
  2. URL提取:匹配成功后,直接从JSON条目中提取线缆URL和接口URL。
  3. 格式对齐:严格按照指定输出格式拼接字符串,与预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:25:03