这里,我想验证用户名是否是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路径总是返回一个数组