Java Regex删除JSON对象中的键/值

pprl5pva  于 2023-06-30  发布在  Java
关注(0)|答案(2)|浏览(132)

我有一个像下面这样的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的了解很少。所以,我在这里寻求帮助。
先谢谢你了!

odopli94

odopli941#

正则表达式可能不是解析复杂JSON结构的理想工具。
如果你想在java中将JSON解析为Object,你可以这样做:(如果没有,则必须导入库)

String jsontext = "{example: 'only examle'}"

JSONObject jobject = new JSONObject(jsontext);
String example = jobject.getString("jsontext");

如果你有一个JSON数组,比如{myarray:[{...},{...}]}
那么你可以处理:

JSONArray jarray = jobject.getJSONArray("myarray");

通过这种方式,您可以删除JSON命令句柄。
REGAX是一个非常糟糕的解决方案!!

4dbbbstv

4dbbbstv2#

“正则表达式”中的“正则”不是一个随机的单词。它特别指的是Regular Grammar的概念。如中所示,正则表达式只能用于解析用正则语法编写的内容,关键是JSON is not a Regular Grammar
因此,您不能使用RE解析。
你被要求这么做。好吧。如果我让你打破光速呢?还是让2+2等于5答案很简单:你被要求做一些不可能的事情
你可以在JSON上添加一堆子句来使它成为常规的,但是这样一来,它就不再是JSON了。你也可以编写一个基于RE的JSON解析器/修饰符,它只是对某些输入做了错误的事情,但是这样你就有了一个不正确的算法。

相关问题