我有一个像下面这样的JSON:{"queueNumber": "123","field":"name",UserId":[12,12,34],"cur":[{"objectName":"test","uniqueNumber":"123456"}]}
我想删除键-值对,如果它匹配键或值匹配给定的字段。
我在java中使用下面的正则表达式。但是,如果键的值是Array类型,则不会删除。ex:UserId”:[12,12,34](,\s*"(queueNumber|name|uniqueNumber|cur|UserId)\d*":\s*(".*?"|\d+.\d+|\w+))|("(queueNumber|name|uniqueNumber|cur|UserId)\d*":\s*(".*?"|\d+.\d+|\w+)(\s*,)?)
电流输出:{"UserId":[12,12,34],"cur":[{"objectName":"test"}]}
预期输出:{"cur":[{"objectName":"test"}]}
很明显,正则表达式并不是一个理想的方法。但是,目前我们必须使用正则表达式来解决这个问题。如何改进这个正则表达式来处理这种情况?
我对regex的了解很少。所以,我在这里寻求帮助。
先谢谢你了!
2条答案
按热度按时间odopli941#
正则表达式可能不是解析复杂JSON结构的理想工具。
如果你想在java中将JSON解析为Object,你可以这样做:(如果没有,则必须导入库)
如果你有一个JSON数组,比如
{myarray:[{...},{...}]}
那么你可以处理:
通过这种方式,您可以删除JSON命令句柄。
REGAX是一个非常糟糕的解决方案!!
4dbbbstv2#
“正则表达式”中的“正则”不是一个随机的单词。它特别指的是Regular Grammar的概念。如中所示,正则表达式只能用于解析用正则语法编写的内容,关键是JSON is not a Regular Grammar。
因此,您不能使用RE解析。
你被要求这么做。好吧。如果我让你打破光速呢?还是让2+2等于5答案很简单:你被要求做一些不可能的事情
你可以在JSON上添加一堆子句来使它成为常规的,但是这样一来,它就不再是JSON了。你也可以编写一个基于RE的JSON解析器/修饰符,它只是对某些输入做了错误的事情,但是这样你就有了一个不正确的算法。