使用正则表达式从 JSON 中删除一个对象

Remove an object from JSON using RegEx

我有 JSON 个这种格式的对象:

 {
     "1f626": {
         "name": "frowning face with open mouth",
         "ascii": [],
         "code_points": {
             "base": "1f626",
             "default_matches": [
                 "1f626"
             ],
             "greedy_matches": [
                 "1f626"
             ],
             "decimal": ""
         }
     }
 }

我必须使用 正则表达式 删除 code_points 对象。


我试过使用这个正则表达式:

(("code\w+)(.*)(}))

但它只是 select 第一行。 我必须 select 直到大括号结束才能完全摆脱 code_points 对象。

我该怎么做?


注意:我必须使用正则表达式而不是 JavaScript 来删除它。 请不要 post 任何 JavaScript 答案或将其标记为可能与基于 JavaScript 的问题重复。

("code_points")([\s\S]*?)(})

你遇到的问题是 . 实际上是除 \n 之外的任何字符,所以在这种情况下我通常使用 [\s\S] 这意味着任何空白和非空白字符(所以它实际上是任何字符)。您还应该通过添加 ? 使 * 量词变得惰性。

请记住,如果 code_points

中有内部对象(其他 {}),此正则表达式将无法正常工作

或者,在命令行中,如果您可以使用 jq

jq "del(.[].code_points)" <monster.json >smaller_monster.json

这会删除每个二级对象中的 code_points 键。

我的机器处理一个 60MB 的文件大约需要 5 秒。

它不是正则表达式,但也不是 JavaScript。所以,它满足了你一半的非功能性需求。