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

Python使用jsonpath_ng传入变量时出现TypeError: must be str, not dict错误

解决jsonpath_ng中使用变量构建表达式的类型错误问题

你的核心问题是错误地将parse函数的调用语句当成字符串存储,而非实际调用parse函数生成表达式对象。

正确实现代码

import json
from jsonpath_ng.ext import parse

with open('./movies.json') as movies_json:
    movies = json.load(movies_json)

recno = 1
# 先通过f-string生成JSONPath表达式字符串,再传入parse函数解析
jsonpath_expression = parse(f"$.movies[{recno}]")
print('jsonpath_expression type is', type(jsonpath_expression))
for match in jsonpath_expression.find(movies):
    print(match.value)

错误原因详解

你之前的代码中,query_main = f'parse("$.movies[{recno}]")'生成的是一个字符串(内容为parse("$.movies[1]")),而不是调用parse()函数后得到的jsonpath_ng.jsonpath.Child类型表达式对象。字符串没有find()方法,自然会抛出类型错误。

正确的逻辑是:

  • 用f-string动态拼接出JSONPath规则字符串(比如"$.movies[1]")
  • 将这个字符串传入parse()函数,由它解析成可执行的JSONPath表达式对象
  • 再用这个对象调用find()方法查询数据

额外提示

如果recno是从外部获取的动态值,确保它是合法的整数索引,避免非法字符导致的JSONPath语法错误。

内容的提问来源于stack exchange,提问作者Gursi-ng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:50:41