当前位置: 首页 > 知识库问答 >
问题:

Python的jsonpath_rw:如何相对导航?

葛海阳
2023-03-14

我有一个配置数据库存储在一个json文件中。该文件从磁盘读取,由Pythons json库解析,并存储在名为json的变量中。

现在我正在研究jsonpath_rw以构建更可读的路径表达式,然后编写纯Python代码来访问多个嵌套的dict和数组。

这是我目前的代码:

# select all UART device serial numbers
exprSerial = parse('FPGAList.[*].UART.Serial')

#for serial in UART serial list
for match in exprSerial.find(json):
  print("Match: " + match.value + "    Path:" + str(match.full_path))

  if (match.value == USBSerial):
    #exprUART = match.full_path.Descendants) #under construction

第一个表达式列出所有UART设备序列号。结果显示在屏幕上并正在工作。关于在线文档,我可以通过访问match.full_path打印匹配对象的完整路径。这是一个jsonpath对象。如果我对它调用str(..),它将转换为可读字符串。

接下来,我的代码将该值与给定的序列号进行比较。如果这是真的,我想检查一些其他安全参数:例如,USBDeviceVendor。该键还存储在同一层次结构级别的json文件中。

我的目标是构建一个新的jsonpath相对于match.full_path访问USBDeviceVendor

坏的解决方案:exprVendor=parse(str(match.full_path)"...USBDeviceVendor")

是否可以扩展match.full_pathmatch.full_path.relative(“…USBDeviceVendor”)

共有1个答案

文彭祖
2023-03-14

如果你想上升一级,然后再下降。而不是寻找当前结果的匹配后代。

使用`parent`

parse('`parent`.USBDeviceVendor').find(match)

考虑:

>>> import jsonpath_rw as jp
>>> obj = {'y':{'x':1,'g':{'t':0}}}
>>> jp.parse('`parent`.g').find(jp.parse("y.x").find(obj)[0])[0].value
{'t': 0}

否则:

parse("`this`..USBDeviceVendor").find(match)

考虑:

>>> import jsonpath_rw as jp
>>> obj = {'y':{'x':{'g':{'t':0}}}}
>>> jp.parse("`this`..t").find(jp.parse("y.x").find(obj)[0])[0].value
0
 类似资料:
  • 问题内容: 想象一下这个目录结构: 我正在编码,我需要从中导入一些东西。我该怎么办? 我尝试过,但是得到了“未打包的相对导入尝试”。 我四处搜寻,但只发现骇客。有没有一种干净的方法? 问题答案: 每个人似乎都想告诉你应该做什么,而不仅仅是回答问题。 问题是你通过将作为参数传递给解释器而将模块作为运行。 从PEP 328: 相对导入使用模块的属性来确定该模块在包层次结构中的位置。如果模块的名称不包含

  • 问题内容: 大家好-我正在用Python中的相关知识来表达自己的观点。我已经阅读了30篇文档,并在SO和其他论坛上阅读了很多帖子-似乎还是行不通。 我的目录结构目前看起来像这样 我希望expander.py和language_id.py可以访问功能模块。我运行python main.py,可以从components.expander import 和components.language_id i

  • 问题内容: 想要导入 这只是一个示例,但实际上我只想在父目录中进行模块的相对导入。我已经尝试了各种方法并得到此错误… 我在某处读到该程序开始处的脚本不应该放在程序包中,并且我尝试像这样修改结构… 但有同样的错误。 我该怎么做?这是否足够? 编辑:在Python 2 问题答案: 稍微摆弄一下之后,我意识到了如何设置它,并且出于特定性考虑,我将不使用foo bar名称。我的项目目录设置为… 一条线看起

  • 问题内容: 我想从同一目录中的另一个文件导入函数。 有时它对我有用,但有时我得到: 有时它可与一起使用,但有时我也会得到: 我不了解这里的逻辑,也找不到任何解释。这看起来完全是随机的。 有人可以向我解释所有这些背后的逻辑是什么? 问题答案: 不幸的是,该模块需要位于程序包内部,有时还需要作为脚本运行。知道如何实现吗? 像这样的布局很普遍… … mymodule.py像这样… ......一个myo

  • 我想从同一目录中的另一个文件导入一个函数。 有时使用对我有效,但有时我会得到一个: 有时它与一起工作,但有时我也会得到一个: 我不明白这里的逻辑,也找不到任何解释。这看起来完全是随机的。 谁能给我解释一下这一切背后的逻辑是什么?

  • 问题内容: 假设我有以下文件, 现在,如果我跑步,它说。 这是有道理的,并且按照此链接中的以下语句运行: “它将首先在包的目录中查找” 假设我稍微修改了文件结构(添加了一个核心目录): 现在,如果我运行,它将加载内置模块。 同样在第二种情况下,如果必须遵守“ 它将首先在软件包的目录中查找 ” 这样 的语句 ,是否 应该加载本地文件,因为它是“软件包的目录”? 我的术语“包目录”的意义是 明确 的