Редактирование структуры, как в режиме org, для JSON


15

Я пытаюсь отредактировать файл Swagger JSON в emacs. Он содержит большие вложенные объекты JSON, поэтому я хочу свернуть и скрыть некоторые из них.

Я пробовал origami-mode, настроил как origami-c-style-parserв origami-parser-alist, но это довольно простое (слово «парсер» кажется чрезмерно грандиозным словом для того, что он делает). Он не замечает, что подстроки параметров URL Swagger, например, {id}находятся внутри строк JSON, поэтому он тоже радостно их сворачивает, когда я прошу его свернуть все узлы в буфере, кроме текущего. Я не хочу этого делать. Я хочу способ разрушения только JSON поддерев , как объекты, а не подстроки JSON строки , которые случаются иметь фигурные скобки в них. Как я могу достичь этой цели?


Я не знаю этого точно, но вполне возможно, что js2-modeесть сворачивание, которое также может сворачивать файлы JSON.
wvxvw


Один из подходов заключается в том, чтобы преобразовать ваш JSON в какой-то похожий формат дерева и оперировать этим. Это может конвертировать в xml github.com/hay/xml2json . Yaml был бы другой подход.
Att Righ

Ответы:


1

Emacs поставляется с hs-minor-mode, который можно использовать для выборочного скрытия / отображения блоков кода и комментариев на нескольких языках, включая JavaScript. По умолчанию это позволит вам скрывать и показывать блоки JSON, разделенные символами «{» и «}», но его легко изменить, чтобы «[» и «] также можно было использовать в качестве разделителей блоков. Для этого нам нужно изменить js-modeзапись в hs-special-modes-alistчто-то вроде:

(setcdr (assoc 'js-mode hs-special-mode-alist)' ("[{[]" "[} \\]]" "/ [* /]" nil))

Затем вы должны обнаружить, что блоки [...] могут быть скрыты и показаны, а также блоки {...}.


0

У Myjson-mode есть функция сворачивания кода, которая не должна пытаться складывать вещи, похожие на объекты или массивы внутри строк. Это не зрелый мажорный режим, но его следует использовать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.