PAYATHON 2026

Python 如何遍历 JSON 中的所有 description 字段?

技术老齐

直接遍历 newDictionary['data']['job'],在循环中读取每条记录的 description。要优先输出译文,就用 translation is None 判断是否为空;为空时输出原文 description['value']。

为什么会重复输出第一条记录?

原代码在循环开始前就读取了字段,而且索引固定为 [0]:

x = newDictionary['data']['job'][0]['description']['translation']
y = newDictionary['data']['job'][0]['description']

x 和 y 因此一直保存着第一条记录的内容。循环执行了三次,但没有通过循环变量读取其他记录。

len(newDictionary['data']['job']) 统计的是职位记录数。示例中每条记录恰好都有一个 description,所以职位记录和 description 的数量都是 3。

如何逐条读取并输出?

假设 JSON 已经解析到 newDictionary,将原来的取值和循环代码替换为:

jobs = newDictionary['data']['job']

for count, job in enumerate(jobs, start=1):
    description = job['description']
    translation = description.get('translation')

    if translation is None:
        text = description['value']
    else:
        text = translation

    print(count, text)

print('记录数:', len(jobs))

每次循环中,job 都是当前的职位记录。enumerate(..., start=1) 同时提供从 1 开始的序号,不用再手动执行 count = count + 1。

修正示例 JSON 的字符串格式后,输出为:

1 Holland(ALPHA) is in English
2 Home" HOLLAND(H/F) in English
3 last one is english
记录数: 3

第三条记录的 translation 为 null,所以输出的是 value。

如果需要输出包含原文和译文的完整 description 对象,可以简化为:

for job in newDictionary['data']['job']:
    print(job['description'])

需要注意哪些细节?

JSON 的 null 对应 Python 的 None

解析 JSON 后,判断空值应写成:

if translation is None:

'Null' 是普通字符串,不能用来判断 JSON 的空值。原代码中的 y 保存的是整个 description 字典,要读取原文还需要取其中的 value。

前面的主示例只在译文为 None 或缺少 translation 键时回退到原文。如果空字符串 "" 也表示没有译文,且该字段只可能是字符串或 null,可以改成:

text = description.get('translation') or description['value']

示例 JSON 有一处字符串未闭合

第二条记录的 translation 缺少结尾双引号,应修正为:

"translation": "Home\" HOLLAND(H/F) in English"

如果实际响应中也有这个错误,程序会在解析 JSON 时失败,无法执行后面的遍历。

解析响应时不需要额外调用 str()

requests.get(...).text 已经是字符串,可以直接传给 json.loads()。也可以用 Response.json() 解析响应:

import requests

response = requests.get('http://someapi', timeout=10)
response.raise_for_status()
newDictionary = response.json()

将占位地址替换为实际接口地址,再接上前面的循环即可。循环示例假定 data.job 是列表,每条记录的 description 都是包含 value 的字典。如果接口不保证这些字段存在,需要按实际数据约定补充检查。

备注:内容仅供参考。