值匹配的Json路径表达式



这里,我想验证用户名是否是johndoe。

{
"name": "John doe",
"age": 26,
"address": {
"streetAddress": "naist street",
"city": "Nara"
},
"phoneNumbers": [
{
"type": "iPhone",
"number": "0123-4567-8888"
}
]
}

我试过$.firstName[?(@.=='John Doe')] and $[?(@.name=='John')],但什么都不起作用。

试试这个:

$[?(@.name == 'John doe')]

如果名称匹配,它将返回一个包含原始对象的非空数组。

$[?(@.name == 'John doe')].name

它将返回一个仅包含名称的非空数组。

https://jsonpath.herokuapp.com/

注意:并非所有实现都支持此匹配

由于您已经标记了问题xpath,XPath3.1的解决方案是

?name = "John doe"

早期版本的XPath不支持JSON。

您必须指出要使用jsonpath或xpath。根据你问题中的样本,我可以猜测你正在尝试jsonpath。由于json中没有名字,请尝试这个

$[?(@ == 'John doe')]  //  result ["John doe"]

但我只想用这个

var ifJohnExist =user.name.includes("John");

IMHO没有人以这种方式使用jsonpath,jsonpath是为搜索而创建的。所以如果你的json像这个

var user=[{
"name": "John doe",
"age": 26,
"address": {
"streetAddress": "naist street",
"city": "Nara"
},
"phoneNumbers": [
{
"type": "iPhone",
"number": "0123-4567-8888"
}
]
}];

然后您可以使用jsonpath来查找包含该名称的数组元素

$[?(@.name.includes('John'))].name //result ["John doe"]

记住json路径总是返回一个数组

最新更新