16

I am trying to edit a Swagger JSON file in emacs. It contains large nested JSON objects, so I want to collapse and hide some of them.

I have tried origami-mode, configured as origami-c-style-parser in origami-parser-alist, but it is quite unsophisticated (the word "parser" seems to be an overly grandiose word for what it does). It doesn't notice that Swagger URL parameter substrings like {id} are inside JSON strings, so it happily collapses them too when I ask it to collapse all nodes in the buffer except the current node. I don't want it to do that. I want a way of collapsing only JSON subtrees like objects, not substrings of JSON strings that happen to have curly braces in them. How can I achieve this goal?

Drew
  • 75,699
  • 9
  • 109
  • 225
Robin Green
  • 949
  • 7
  • 16
  • I don't know this for sure, but it is quite possible that `js2-mode` has folding that can also fold JSON files. – wvxvw Jul 12 '16 at 05:55
  • Related: [Code-folding extensions for json](http://emacs.stackexchange.com/questions/7361/code-folding-extensions-for-json). – Dan Jul 12 '16 at 15:48
  • One approach is to convert your json into some similar tree format and operate on that. This can convert into xml https://github.com/hay/xml2json. Yaml would be another approach. – Att Righ Feb 15 '17 at 18:43

2 Answers2

1

Emacs comes with hs-minor-mode which can be used selectively hide/show code and comment blocks in several languages, including JavaScript. By default this will let you hide and show JSON blocks delimited by '{' and '}' but it is easily modified to allow '[' and ']' as block delimeters as well. To do this we need to modify the js-mode entry in hs-special-modes-alist with something like:

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

You should then find that [...] blocks can be hidden and shown as well as {...} blocks.

stevoooo
  • 737
  • 3
  • 8
0

My json-mode has a code folding feature which shouldn't try to fold things that look like Objects or Arrays inside of strings. It's not a mature major-mode, but it should be usable.