是否可以在 jsonpath-ng 中进行嵌套搜索?
Is it possible to do nested search in jsonpath-ng?
来源“mapping.json”:
{
"result": {
"src_color": "test_rule_2"
},
"rules": {
"color_degree": {
"test_rule_1": {
"color": 1
},
"test_rule_2": {
"color": 2
}
}
}
}
所以它完美地工作:
with open("mapping.json", 'r') as json_file:
mapping = json.load(json_file)
expression = parse('$.rules.color_degree.test_rule_2.color')
match = expression.find(mapping)
if match:
pprint(match[0].value)
但是在路径“test_rule_2”中,我需要替换为 result->src_color
中的值
如何正确描述这样的事情:
expression = parse('$.rules.color_degree.($.result.src_color.value).color')
如果我没看错你的问题是可以的,但是需要两步:
#first: get the variable:
src_expression = parse('$.result.src_color')
src_match = src_expression.find(mapping)
#second: get the target
expression = parse(f'$.rules.color_degree.{src_match[0].value}.color')
match = expression.find(mapping)
if match:
print(match[0].value)
输出为2
。
编辑:
我不知道为什么有人想一步完成,但这是可能的:
parse(f'$.rules.color_degree.{parse("$.result.src_color").find(mapping)[0].value}.color').find(mapping)[0].value
相同的输出。
来源“mapping.json”:
{
"result": {
"src_color": "test_rule_2"
},
"rules": {
"color_degree": {
"test_rule_1": {
"color": 1
},
"test_rule_2": {
"color": 2
}
}
}
}
所以它完美地工作:
with open("mapping.json", 'r') as json_file:
mapping = json.load(json_file)
expression = parse('$.rules.color_degree.test_rule_2.color')
match = expression.find(mapping)
if match:
pprint(match[0].value)
但是在路径“test_rule_2”中,我需要替换为 result->src_color
中的值如何正确描述这样的事情:
expression = parse('$.rules.color_degree.($.result.src_color.value).color')
如果我没看错你的问题是可以的,但是需要两步:
#first: get the variable:
src_expression = parse('$.result.src_color')
src_match = src_expression.find(mapping)
#second: get the target
expression = parse(f'$.rules.color_degree.{src_match[0].value}.color')
match = expression.find(mapping)
if match:
print(match[0].value)
输出为2
。
编辑:
我不知道为什么有人想一步完成,但这是可能的:
parse(f'$.rules.color_degree.{parse("$.result.src_color").find(mapping)[0].value}.color').find(mapping)[0].value
相同的输出。