【问题标题】:How to remove any type of Key from JSON如何从 JSON 中删除任何类型的密钥
【发布时间】:2019-01-24 13:09:35
【问题描述】:

这是我的 JSON 的一部分:

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

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

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

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

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

【问题讨论】:

标签: java json


【解决方案1】:

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

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

如果你真的想使用正则表达式,你可以使用follow

    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, "");
}

【讨论】:

  • StoryId 是您方法中的一个参数。在这些情况下,正则表达式应该是什么样子?
  • 更新了我的答案,我不累,但我希望它会起作用
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多