Python解析JSON仅输出单条结果,如何正确迭代获取多组verse数据?
解决JSON解析中迭代多组verseId与verseText的问题
问题分析
你的代码存在两个核心问题:
- 外层循环遍历的是
data['data']['chapter']['content'],这个数组仅包含1个paragraph类型的对象,因此循环仅执行一次,只能输出第一组内容。 - 硬编码索引
0和1获取元素,无法遍历后续的verse元素,完全没有利用迭代逻辑处理多组数据。
修正方案
需要深入到paragraph内部的content数组,遍历其中的元素并配对verse-number与verse-text。以下提供两种可行实现:
方法1:按固定步长遍历(适合结构稳定的场景)
利用每两个元素为一组的规律,按步长2遍历数组:
import json with open('data.json') as f: data = json.load(f) # 定位到paragraph内部的内容数组 inner_content = data['data']['chapter']['content'][0]['content'] # 每2个元素为一组,遍历获取verseId和verseText for i in range(0, len(inner_content), 2): verse_id = inner_content[i]['verseId'] verse_text = inner_content[i+1]['verseText'] print(f"{verse_id}\t{verse_text}")
方法2:按元素类型匹配(适合结构可能变化的场景)
通过判断元素类型,动态记录当前verseId,遇到对应文本时输出:
import json with open('data.json') as f: data = json.load(f) inner_content = data['data']['chapter']['content'][0]['content'] current_verse_id = None for item in inner_content: if item['type'] == 'verse-number': current_verse_id = item['verseId'] elif item['type'] == 'verse-text' and current_verse_id: print(f"{current_verse_id}\t{item['verseText']}") current_verse_id = None
两种方法均可输出你期望的结果:
PSA.117.1 Sed ut perspiciatis unde omnis iste natus. PSA.117.2 Lorem ipsum dolor sit amet.
内容的提问来源于stack exchange,提问作者bsteo
相关产品推荐
相关产品推荐

