mongodb / jsonpath / jmespath 表达式过滤属性包含特殊字符或重音字符的对象
mongodb / jsonpath / jmespath expression to filter object with properties that contain special or accented characters
我需要过滤这个json中包含特殊字符的对象。 (我可以写一个javascript或者导入查询mongo中的数据。)
{
"Detail": [{
"name": "somename1",
"text": "Sometext1"
},
{
"name": "somename2",
"text": "Sometext!"
}, {
"name": "somename3",
"text": "método"
}
]
}
预期输出
{
"Detail": [
{
"name": "somename2",
"text": "Sometext!"
},
{
"name": "somename3",
"text": "método"
}
]
}
有没有办法在 jsonpath 或 jmspath 中使用正则表达式来做到这一点?
我尝试了各种方法来接近我需要的东西,比如这些,但我现在受阻了
Detail[].text.contains(`é`) in jmespath
$.[?(@.text=~ ^[a-zA-Z0-9]*$].text in jsonpath
db.test.find({'Detail.text': /[a-zA-Z0-9]*$]/}) in mongodb where 'test' is the collection
我认为你应该试试这个工具 Jayway JsonPath https://github.com/json-path/JsonPath
我在这里在线试过https://jsonpath.herokuapp.com/
在这张图片中你可以看到输出。
这是我使用的正则表达式
.Detail[?(@.text =~ /(?:^\W+\w*$)|(?:^\w+\W+$)|(?:^\w+\W+\w+$)/)]
我把问题分成了三组
字符串以至少一个特殊字符或非单词字符 ^\W+ 开头,后跟零个或多个单词字符,即 $éxito
该字符串至少以一个单词字符 ^\w+ 开头,后面跟着零个或多个非单词字符 \w* 即 culminó, knowledge.
字符串以至少一个单词字符 ^\w+ 开头,然后是一个或多个非单词字符 \W+ 然后至少一个单词字符,即 beneplácito,now|knowledge,what $$$$发生了。
前面的每个案例都使用 non-capturing 组 (?:) 进行分组,并且使用的逻辑运算是 OR (|),因为您的字符串可以匹配三个组中的任何一个。
我也用过这个工具https://regexr.com/来准备正则表达式
顺便说一句,这是基于这个答案
我需要过滤这个json中包含特殊字符的对象。 (我可以写一个javascript或者导入查询mongo中的数据。)
{
"Detail": [{
"name": "somename1",
"text": "Sometext1"
},
{
"name": "somename2",
"text": "Sometext!"
}, {
"name": "somename3",
"text": "método"
}
]
}
预期输出
{
"Detail": [
{
"name": "somename2",
"text": "Sometext!"
},
{
"name": "somename3",
"text": "método"
}
]
}
有没有办法在 jsonpath 或 jmspath 中使用正则表达式来做到这一点?
我尝试了各种方法来接近我需要的东西,比如这些,但我现在受阻了
Detail[].text.contains(`é`) in jmespath
$.[?(@.text=~ ^[a-zA-Z0-9]*$].text in jsonpath
db.test.find({'Detail.text': /[a-zA-Z0-9]*$]/}) in mongodb where 'test' is the collection
我认为你应该试试这个工具 Jayway JsonPath https://github.com/json-path/JsonPath
我在这里在线试过https://jsonpath.herokuapp.com/
在这张图片中你可以看到输出。
这是我使用的正则表达式
.Detail[?(@.text =~ /(?:^\W+\w*$)|(?:^\w+\W+$)|(?:^\w+\W+\w+$)/)]
我把问题分成了三组
字符串以至少一个特殊字符或非单词字符 ^\W+ 开头,后跟零个或多个单词字符,即 $éxito
该字符串至少以一个单词字符 ^\w+ 开头,后面跟着零个或多个非单词字符 \w* 即 culminó, knowledge.
字符串以至少一个单词字符 ^\w+ 开头,然后是一个或多个非单词字符 \W+ 然后至少一个单词字符,即 beneplácito,now|knowledge,what $$$$发生了。
前面的每个案例都使用 non-capturing 组 (?:) 进行分组,并且使用的逻辑运算是 OR (|),因为您的字符串可以匹配三个组中的任何一个。
我也用过这个工具https://regexr.com/来准备正则表达式
顺便说一句,这是基于这个答案