Python的jsonpath_rw:如何相对导航?

Python的jsonpath_rw:如何相对导航?,python,json,jsonpath,Python,Json,Jsonpath,我有一个存储在json文件中的配置数据库。该文件从磁盘读取,由Python json库解析并存储在名为json的变量中 现在我正在研究jsonpath_rw以构建更可读的路径表达式,然后编写纯Python代码来访问多个嵌套的dict和数组 这是我目前的代码: # select all UART device serial numbers exprSerial = parse('FPGAList.[*].UART.Serial') #for serial in UART serial list

我有一个存储在json文件中的配置数据库。该文件从磁盘读取,由Python 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文件中

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

错误的解决方案:
exprVendor=parse(str(match.full_path)+“.USBDeviceVendor”)


是否可以像
match.full\u path.relative(“…USBDeviceVendor”)
那样扩展
match.full\u path.relative
如果您想上一级,然后再下一级。而不是查找当前结果的匹配子体

使用
`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}
>>> 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
否则:

parse("`this`..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}
>>> 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