如何从JSON中删除任何类型的Key

时间:2019-01-24 13:09:35

标签: java json

这是我的JSON的一部分:

{
"expressions": {
    "storyId": "doesNotMatter"
},
"facts": { }
}

我希望从JSON中删除键“ storyId”。如何通过将JSON转换为字符串并使用Regex来做到这一点?

在删除不需要的文本之后,我的JSON应该像这样:

{
"expressions": {       
},
"facts": { }
}

注意:我看不到我的原始JSON,并且不知道谁是谁或什么包装器元素。

2 个答案:

答案 0 :(得分:1)

我不建议您使用正则表达式,最好的选择是使用一个库来解析json,删除值,然后再次将其转换为字符串。

    JSONObject jsonObject = new JSONObject(input);
    jsonObject.getJSONObject("expressions").remove("storyId");
    String output = jsonObject.toString();

如果您确实要使用正则表达式,则可以使用以下命令

    jsonString.replaceAll("(\\\"storyId\\\"|\\'storyId\\')\\s*:\\s*(\\\"[^\\\"]*\\\"|'[^\\\"]*')\\s*,?", "");

但只需确保storyId确实是一个字符串,否则此正则表达式将无法工作。

编辑:更新了我的答案,如果您想要一个使用正则表达式删除参数的函数,

void replaceAllKeys(String keyName, String jsonAsString) {
    String pattern = String.format("(\\\"%s\\\"|\\'%s\\')\\s*:\\s*(\\\"[^\\\"]*\\\"|'[^\\\"]*')\\s*,?", keyName, keyName);
    return jsonAsString.replaceAll(pattern, "");
}

答案 1 :(得分:0)

首先,我假设您将在jsonObj中获得所有json对象,然后通过传递json键来调用remove(),如下所示:

jsonObj.getAsJsonObject("expressions").remove("storyId");