使用正则表达式从 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。所以,它满足了你一半的非功能性需求。
我有 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。所以,它满足了你一半的非功能性需求。