如何比较过滤器运算符中的数字字符串?
How to compare number string in filter operator?
data: [
{
"name": "mark",
"age": "20"
},
{
"name": "john",
"age": "10"
}
]
在这种情况下,如何获得大于 10 的年龄?
示例代码:
JsonPath.read(json, "$.data[?(@.age > 10)]");
这可以使用 Jayway 的 JsonPath 库来完成。
首先,您显示的 JSON 不适合处理,包装 { }
丢失。
其次,如果您将数字作为字符串进行测试,Jayway 的比较运算符会起作用(这有点奇怪,但库会以这种方式在内部执行所需的转换)。
所以,有了这个 JSON:
{
"data":[
{
"name":"mark",
"age":"20"
},
{
"name":"john",
"age":"10"
}
]
}
这个过滤器:
$.data[?(@.age > '10')]
您得到了预期的结果 [{"name" : "mark", "age" : "20"}]
。你可以测试一下online here.
更新
正如 Parveen Verma 所指出的,如果范围过滤器需要隐式类型转换,建议的过滤器将不起作用。
Jayway 似乎只在使用相等运算符时支持隐式转换,例如$.data[?(@.age == 10)]
(尽管类型不同,这仍然有效)。
有一个未合并的 pull request 添加了此行为;由于代码有点落后于当前版本,因此可能需要一些工作来集成它,但如果您确实需要此功能,则可以完成。
data: [
{
"name": "mark",
"age": "20"
},
{
"name": "john",
"age": "10"
}
]
在这种情况下,如何获得大于 10 的年龄?
示例代码:
JsonPath.read(json, "$.data[?(@.age > 10)]");
这可以使用 Jayway 的 JsonPath 库来完成。
首先,您显示的 JSON 不适合处理,包装 { }
丢失。
其次,如果您将数字作为字符串进行测试,Jayway 的比较运算符会起作用(这有点奇怪,但库会以这种方式在内部执行所需的转换)。
所以,有了这个 JSON:
{
"data":[
{
"name":"mark",
"age":"20"
},
{
"name":"john",
"age":"10"
}
]
}
这个过滤器:
$.data[?(@.age > '10')]
您得到了预期的结果 [{"name" : "mark", "age" : "20"}]
。你可以测试一下online here.
更新
正如 Parveen Verma 所指出的,如果范围过滤器需要隐式类型转换,建议的过滤器将不起作用。
Jayway 似乎只在使用相等运算符时支持隐式转换,例如$.data[?(@.age == 10)]
(尽管类型不同,这仍然有效)。
有一个未合并的 pull request 添加了此行为;由于代码有点落后于当前版本,因此可能需要一些工作来集成它,但如果您确实需要此功能,则可以完成。