Pengeditan garis besar, seperti mode-org, untuk JSON

15

Saya mencoba mengedit file Swagger JSON di emacs. Ini berisi objek JSON bersarang besar, jadi saya ingin menutup dan menyembunyikan beberapa di antaranya.

Saya sudah mencoba origami-mode, dikonfigurasi seperti origami-c-style-parserpada origami-parser-alist, tetapi cukup tidak canggih (kata "parser" tampaknya menjadi kata yang terlalu muluk untuk apa yang dilakukannya). Ia tidak memperhatikan bahwa substring parameter Swagger URL seperti {id}berada di dalam string JSON, jadi dengan senang hati mereka akan runtuh juga ketika saya memintanya untuk menutup semua node dalam buffer kecuali node saat ini. Saya tidak ingin melakukan itu. Saya ingin cara mengurangkan hanya subtree JSON seperti objek, bukan substring string JSON yang kebetulan memiliki kurung kurawal di dalamnya. Bagaimana saya bisa mencapai tujuan ini?

Robin Green
sumber
Saya tidak tahu ini pasti, tetapi sangat mungkin bahwa js2-modememiliki lipat yang juga dapat melipat file JSON.
wvxvw
Salah satu pendekatan adalah mengubah json Anda menjadi beberapa format pohon yang sama dan beroperasi pada itu. Ini dapat dikonversi menjadi xml github.com/hay/xml2json . Yaml akan menjadi pendekatan lain.
Att Righ

Jawaban:

1

Emacs hadir dengan hs-minor-mode yang dapat digunakan secara selektif menyembunyikan / menampilkan kode dan blok komentar dalam beberapa bahasa, termasuk JavaScript. Secara default ini akan memungkinkan Anda menyembunyikan dan menampilkan blok JSON yang dibatasi oleh '{' dan '}' tetapi mudah dimodifikasi untuk memungkinkan '[' dan ']' sebagai pembatas blok juga. Untuk melakukan ini, kita perlu memodifikasi js-modeentri hs-special-modes-alistdengan sesuatu seperti:

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

Anda kemudian harus menemukan bahwa [...] blok dapat disembunyikan dan ditampilkan serta {...} blok.

stevoooo
sumber
0

Sayajson-mode memiliki fitur kode lipat yang tidak boleh mencoba untuk melipat hal-hal yang terlihat seperti Obyek atau Array di dalam string. Ini bukan mode utama dewasa, tetapi harus dapat digunakan.

DoMiNeLa10
sumber