Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

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?



If you climb to the top of a really tall mountain you'll get a similar perspective to what Google Maps provides.


That’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.


Ads?


We 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.


Peak comedy is a slippery slope. Just be careful to not trigger an avalanche of puns, because that can snowball into something unstoppable, then everything goes downhill fast!


High-brow humour is not HN's strong suit it would appear :)


I 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.


Python 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"
            ]
        }
    ]
  }


I 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.


I 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.


I 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.


This is how Lisp code (and S-expressions in general) is conventionally indented.


You can even do this by console logging with JSON.stringify(): https://stackoverflow.com/questions/4810841/pretty-print-jso...


Have you tried json-mode? Seems to work pretty well.


The 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..)


gg=G in evil mode will do that.


Evil (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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: