用于删除 JSON 对象中的键/值的正则表达式

问题描述 投票:0回答:2

我有一个如下所示的 JSON:

    {"queueNumber": "123","field":"name",UserId":[12,12,34],"cur":[{"objectName":"test","uniqueNumber":"123456"}]}

如果键值对与给定字段匹配,我想删除它。 我正在使用下面的正则表达式。如果值的类型是数组,它不会删除键。

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"}]}

很明显,正则表达式不是实现此目的的理想方法。但是,目前我们必须使用正则表达式来解决这个问题。
如何改进这个正则表达式来处理这种情况?

我对正则表达式的了解非常少。所以,我在这里寻求帮助。

提前致谢!

注意:我必须使用正则表达式删除它,而不是使用任何其他语言。请不要发布任何这些答案或将其标记为可能重复的问题。

arrays json regex lexical-analysis
2个回答
1
投票

常规语法的概念。例如,正则表达式只能用于解析用正则语法编写的内容,而且最重要的是,JSON 不是正则语法 因此,您无法使用 RE 来解析 。

你被要求这样做。好的。如果我让你打破光速怎么办?或者让 2+2 等于 5?答案很简单:

你被要求做一些不可能做的事情

你可以在 JSON 上添加一堆子句来使其变得规则,但是这样,它就不再是 JSON。您还可以编写一个基于 RE 的 JSON 解析器/修改器,它只是对某些输入执行错误的操作,但这样您就会得到不正确的算法。


0
投票

针对您的情况,可以根据具体情况进行。 (至少,如果你的例子确实具有代表性的话。)

改变

(".*?"|\d+.\d+|\w+)

(".*?"|\[[\d,]+\]|\d+.\d+|\w+)
然后我会回去复习第三条和第四条。
第三个可能应该是

\d+\.\d+

,并且可能证明添加变体

\d+
是合理的。另一方面,也许您还想捕获
1E10
,但不是
1.1E10
。 第四个应该只匹配选定的关键字(
true
false
null
),所以你应该只命名它们。
    

© www.soinside.com 2019 - 2024. All rights reserved.