如何使用Python遍历JSON对象数组 检索指定位置的目标字符串
Python实现JSON指定节点的字符串存在性校验
你的场景不需要做全量JSON递归遍历,目标节点路径规则固定为最外层用户标识键 -> 对应用户下的帖子分类键 -> 存储字符串的数组,直接按键索引定位即可,实现逻辑如下:
- 先保证JSON格式合法:你提供的示例JSON存在数组元素缺失逗号、数组末尾多余逗号的语法错误,实际使用前需要修正,否则JSON解析阶段会直接报错
- 用Python内置
json模块把JSON字符串/本地JSON文件加载为Python字典结构 - 增加边界判断:依次校验用户标识是否存在、对应帖子分类是否存在,避免触发
KeyError异常 - 定位到目标数组后,直接用
in运算符判断目标字符串是否存在于数组中
完整可运行代码
import json # 加载JSON数据:以下为修正语法错误后的示例JSON,实际使用替换为你的数据源 json_content = ''' { "user1": { "posts": [ "hello", "hello you", "Hello awesome" ], "yesterday_posts": [ "hi", "hi you", "Hi awesome" ] }, "user2": { "post": [ "awesome", "help", "works" ], "postfrom2012": [ "hi awesome", "hi help", "hi works" ] } } ''' # 如果是读取本地JSON文件,替换为以下写法: # with open("your_data.json", "r", encoding="utf-8") as f: # data = json.load(f) data = json.loads(json_content) # 业务入参 user = "user1" post_name = "yesterday_posts" target_string = "hi you" # 校验函数 def is_string_exist(data: dict, user_id: str, post_cat: str, target: str) -> bool: # 校验用户是否存在 if user_id not in data: return False user_posts = data[user_id] # 校验帖子分类是否存在 if post_cat not in user_posts: return False # 定位到目标数组做匹配 return target in user_posts[post_cat] # 执行校验 check_result = is_string_exist(data, user, post_name, target_string) print(check_result) # 示例场景下输出为True
适配扩展场景
- 如果需要不区分大小写匹配,可将数组元素和目标字符串统一转小写后比对:
return target.lower() in [item.lower() for item in user_posts[post_cat]] - 如果后续JSON层级变深、路径不固定,再补充递归遍历逻辑搜索目标节点,当前固定路径场景下按键索引查询性能最优
- 如果需要匹配部分子串而非完全相等,可遍历数组元素用
target in item做子串判断
内容的提问来源于stack exchange,提问作者TigerStrips
相关产品推荐
相关产品推荐

