Удалить объект из JSON, используя RegEx - PullRequest
0 голосов
/ 26 августа 2018

У меня есть объекты JSON в этом формате:

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

Я должен удалить объект code_points, используя Регулярные выражения .


Я пытался использовать это RegEx:

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

Но это только выбор первой строки. Я должен выбрать до конца фигурных скобок, чтобы полностью избавиться от объекта code_points.

Как я могу это сделать?


Примечание. Я должен удалить его, используя регулярные выражения, а не JavaScript. Пожалуйста, не публикуйте ответы JavaScript или пометьте их как возможную копию вопроса на основе JavaScript.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

В качестве альтернативы, в командной строке, если вы можете использовать jq

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

При этом удаляется клавиша code_points внутри каждого объекта 2-го уровня.

Моему аппарату понадобилось около 5 секунд на 60 МБ документе.

Это не регулярное выражение, но и не JavaScript. Таким образом, он соответствует половине ваших нефункциональных требований.

0 голосов
/ 26 августа 2018

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

Проблема, с которой вы столкнулись, заключается в том, что . - это фактически любой символ, кроме \n, поэтому в этом случае я обычно использую [\s\S], что означает любой пробел и непробельный символ (так что это на самом деле любой персонаж).Также вы должны сделать квантификатор * ленивым, добавив ?.

Помните, что это регулярное выражение не будет работать должным образом, если у вас есть внутренний объект (другой {}) в code_points

...