Структурне редагування, як OR-режим, для 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 . Ямл був би іншим підходом.
Att Righ

Відповіді:


1

Emacs оснащений режимами hs-minor, які можна використовувати вибірково приховати / показати код та блоки коментування на кількох мовах, включаючи JavaScript. За замовчуванням це дозволить вам приховати та показувати блоки JSON, розміщені на '{' та '}', але це легко модифікується, щоб дозволити '[' і ']' також як деліметри блоку. Для цього нам потрібно змінити js-modeзапис hs-special-modes-alistтаким чином:

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

Потім слід виявити, що [...] блоки можуть бути приховані та показані, а також {...} блоки.


0

У менеjson-mode є функція складання коду, яка не повинна намагатися складати речі, схожі на об’єкти чи масиви всередині рядків. Це не зрілий мажорний режим, але він повинен бути корисним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.