鉴于我有一个表示JSON对象的字符串。它可能是无效,因为可能有一些参数将被另一个系统替换(例如%参数%)。我需要使用正则表达式删除已知propertyName等于“true”的所有对象。使用正则表达式从JSON中移除给定属性的对象
{
"someTopLevelProp": "value",
"arrayOfData": [
{
"firstPropIAlwaysKnow": "value",
"dontCareProp": $paramValue$,
"dontCareProp2": 2,
"flagWhichShouldIUse": true,
"somethingAtTheEnd": "value"
},
{
"absolutelyAnotherObject": %paramValue%
},
{
"firstPropIAlwaysKnow": "value",
"dontCareProp": "value",
"dontCareProp2": 2,
"flagWhichShouldIUse": false,
"somethingAtTheEnd": "value"
},
{
"firstPropIAlwaysKnow": "value",
"dontCareProp": "value",
"dontCareProp2": 2,
"flagWhichShouldIUse": true,
"somethingAtTheEnd": "value"
}
]
}
在上面的例子中,我总是有“firstPropIAlwaysKnow”,这意味着对象可以包含标志,该标志我需要。之后,可能会有其他属性。但这里最重要的是“这个标志应该使用”道具,这意味着这个对象应该被删除(但只有当值等于'真'时)。因此,我应该收到:
{
"someTopLevelProp": "value",
"arrayOfData": [
{
"absolutelyAnotherObject": %paramValue%
},
{
"firstPropIAlwaysKnow": "value",
"dontCareProp": "value",
"dontCareProp2": 2,
"flagWhichShouldIUse": false,
"somethingAtTheEnd": "value"
}
]
}
我在正则表达式的知识不够强,因此请求社区的帮助。
P.S.请不要提及用正则表达式解析JSON它是疯狂的\不正确的\坏主意 - 确定我知道这一点。
回答:现在我有工作正则表达式做那些东西。谢谢大家在这里试图帮助。也许它会对某人有用。
/{\s+?"firstPropIAlwaysKnow": "value"[^{}]+?(?:\{[^}]*\}[^}]+?)*[^}]+?"flagWhichShouldIUse": true[^}]+?},?/gi
怀疑这实际上可能无需编写自己的JSON解析器它意识到会导致'JSON.parse'抛出的特定语法。最大的问题是嵌套。 –
可能无效的部件是否定义良好?例如,如果你知道任何一种无效的东西来自json内的'%...%'表达式作为一些属性的值。 –