5 ms·
If you indent your code manually then you can achieve something that I feel looks quite similar. So the example they give would be written as: {"squadName"
by geokon 4y ago
If you indent your code manually then you can achieve something that I feel looks quite similar. So the example they give would be written as:
{"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [{"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": ["Radiation resistance",
"Turning tiny",
"Radiation blast"]},
{"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": ["Million tonne punch",
"Damage resistance",
"Superhuman reflexes"]},
{"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": ["Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"]}]}
I've been doing with Clojure/EDN data and I feel it makes it much easier to visually parse.
PS: Does anyone knows if there was an emacs mode that'd do this for me automagically?
- sn9 4y agoYou can even do this by console logging with JSON.stringify(): https://stackoverflow.com/questions/4810841/pretty-print-json-using-javascript https://stackoverflow.com/questions/4810841/pretty-print-jso...
- bboozzoo 4y agoHave you tried json-mode? Seems to work pretty well.
- geokon 4y agoThe point was that the keys and values are all aligned to the same minimal column numbers :) Both `json-mode` `json-reformat` don't seem to do that (and ideally I'd like something that'd work with Clojure/EDN code..)
- user5678 4y agogg=G in evil mode will do that.
- dotancohen 4y agoEvil (Emacs 27.1) produced this: { "squadName": "Super hero squad", "homeTown": "Metro City", "formed": 2016, "secretBase": "Super tower", "active": true, "members": [ { "name": "Molecule Man", "age": 29, "secretIdentity": "Dan Jukes", "powers": [ "Radiation resistance", "Turning tiny", "Radiation blast" ] }, { "name": "Madame Uppercut", "age": 39, "secretIdentity": "Jane Wilson", "powers": [ "Million tonne punch", "Damage resistance", "Superhuman reflexes" ] }, { "name": "Eternal Flame", "age": 1000000, "secretIdentity": "Unknown", "powers": [ "Immortality", "Heat Immunity", "Inferno", "Teleportation", "Interdimensional travel" ] } ] } Interestingly, the first-level items are not indented. Real VIM 8.1 produced the same format, but the first-level items _are_ indented.
- coenhyde 4y agoIf you climb to the top of a really tall mountain you'll get a similar perspective to what Google Maps provides.
- ozim 4y agoI actually laughed. Though - one does not have to do that stuff manually I can imagine some json linter could be configured to do such layout, or someone can just write tool to do that. So idea for this indentation is not bad IMHO.
- solardev 4y agoAds?
- btown 4y agoWe prefer to call them contextually preferred mountaintop suggestions. To suggest otherwise would be to suggest that our entire industry is built on nothing more than peak comedy.
- abrax3141 4y agoThat’s not really fair. At the moment we communicate and read json in text, so formatting the text to be human-readable and reasonably arranged often (although not always) matters.
- nerdponx 4y agoThis is how Lisp code (and S-expressions in general) is conventionally indented.
- dotancohen 4y agoPython formats it almost exactly like you did: $ python3 -m json.tool { "squadName": "Super hero squad", "homeTown": "Metro City", "formed": 2016, "secretBase": "Super tower", "active": true, "members": [ { "name": "Molecule Man", "age": 29, "secretIdentity": "Dan Jukes", "powers": [ "Radiation resistance", "Turning tiny", "Radiation blast" ] }, { "name": "Madame Uppercut", "age": 39, "secretIdentity": "Jane Wilson", "powers": [ "Million tonne punch", "Damage resistance", "Superhuman reflexes" ] }, { "name": "Eternal Flame", "age": 1000000, "secretIdentity": "Unknown", "powers": [ "Immortality", "Heat Immunity", "Inferno", "Teleportation", "Interdimensional travel" ] } ] }
- geokon 4y agoI don't python, but this scheme missed the point. Keys are vertically aligned, but values are not. Some brackets are vertically aligned, other are not (you have to hunt for the starting square brackets). Bracket take up a whole line each wasting vertical space.
- dotancohen 4y agoI see, thanks. For me, the point is just "indent successive objects" so it suffices - especially when I'm in a Python mindset and mentally filtering out brackets anyway. But I could understand why you prefer the formatting as you do.
- geokon 4y agoI think having the values aligned make it much quicker to read off entries. I will generally looked at the keys for the first entry, but for subsequent entries I assume the same ordering and just look at the values on the right. It's a bit trivial, but another subtle effect that I like is that the sub-blocks are not mutually vertically aligned due to being offset by the semi-random length of the key So for instance {"squadName": "Super hero squad", "homeTown": "Metro City", "formed": 2016, "secretBase": "Super tower", "active": true, "members": [{"name": "Molecule Man", "age": 29, "secretIdentity": "Dan Jukes", "powers": ["Radiation resistance", "Turning tiny", "Radiation blast"]}, {"name": "Madame Uppercut", "age": 39, "secretIdentity": "Jane Wilson", "powers": ["Million tonne punch", "Damage resistance", "Superhuman reflexes"]}], "enemies": [{"name": "Eternal Flame", "age": 1000000, "secretIdentity": "Unknown", "powers": ["Immortality", "Heat Immunity", "Inferno", "Teleportation", "Interdimensional travel"]}]} at a glance you see that the third person is not part of the same list as the first two If all second level blocks are at the same level then you need to visually catch that there is extra key.