Hacker News new | past | comments | ask | show | jobs | submit login
JSON Crack – Visualize JSON data into graphs (jsoncrack.com)
576 points by iCutMoon on Aug 28, 2022 | hide | past | favorite | 96 comments



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.


Cool. PlantUML also does JSON visualization [1] if you need a local option or are hesitant to load your data onto a website.

[1] https://plantuml.com/json


JSON Viso can be run locally as well

https://github.com/AykutSarac/jsonvisio.com


That's what I came to find out! Thanks!


Nice! Thank you for that. Did not know that.


You can download the tool


are you an evil hypnotist?


Looks good. Unfortunately most JSON (I personally handle) contains private information and I would never paste it into a web page.


You can run this on your local machine

https://github.com/AykutSarac/jsonvisio.com


I see that this contains code that sends and fetch data to a lot of services for ads, tracking...


The arrays are not presented correctly. Each element in the array points to the parent, rather than being grouped together. Ditto for Objects (key/value pairs).

Since JSON is just a simple tree structure without cycles, the JSON "visualization" doesn't buy you much that indented text formatting can't already give you.


Note: when browsing on mobile it isn't obvious that there are examples, the tweet from github isnt obvious that it is an example and the interactive graph doesnt look like one because it zooms into blank space

although I have a desktop and do development there, my interest in a new tool is frequently is sparked by my casual browsing on mobile, there might be (many) others like me


I scrolled down on mobile and closed the website because I couldn't see any example


Yep, my first thought was “but where are examples” and I couldn’t find any.


Once I was working with an api that used mongodb in the back. Mongo uses very large integers as ids and I was looking at the json generated through a json viewer extension in the browser. I was having problems because I couldn't find the document I was looking at in the database. Turns out, the viewer used the browser's JSON.parse and that was converting the id to a number and losing precision since it was so large. Ever since, I prefer to look at json raw first and then use formatters just to look at the shape, not the data.


For working with JSON from terminal recommend: https://fx.wtf


There's also https://jless.io


I use jq and jless and find that to be more practical than tools like these (not just because of being available in terminal).

When I have large blob of json, I am usually interested in first getting a high level idea of how it is structured (first few levels) then I either need to drill down or filter to find what I need. The combination of jless for interactive exploration and jq to make it easily scriptable/repeatable is quite nice.

I find it natural to reduce the json I start with to a subtree I can make sense of, and thus don't find myself lacking a tool which can provide a visual representation of the complete dataset.


Personally I've never had a problem reading through json, I mean its designed that way to be flat and simple, but this could be brilliant for documentation, even auto updating with some schema changes etc.

Super useful for me in that way so thanks!


if it contains very large, nested objects, it can be harder to get an overview or navigate


Ideally this is something that could run locally but it looks great thank you!

I wish these kind of projects would show up when searching "Online JSON visualization". Current SEO logic means that website like this have pretty much no chance of making it. Would love to be proven wrong though!


This looks like a neat tool, but without the ability to collapse and expand most sections, it's only useful for trivially small JSON files :/


Definitely the nº1 missing feature. Hope it arrives soon :)


You guys will love this also

https://jsonhero.io


I am curious, who needs to visualise these datas? What I am interested in is validation. it's the same as with XML, or any transitional data formats, if I need to fix something I work on a specific set of the data and make sure that it is valid. If it is not I fix it. If I want to visualize data I use it at the endpoints, ie. in Excel or in PowerBI.


this might be a good place to ask: is there any tool out there that can help with json to normalised tables?

I know that many databases can store json, but i often have api's that i would like storing in tables, and feel that 'splitting it out' should be fairly trivial.

Each time i think about making a tool, i am put off by the fact that there is a voice saying 'someone will have done this, in a much better way than you!' :-)

EDIT:

Ignore that, i did that think where i didn't look at the link - this pretty much does what i would need


My sqlite-utils tool can load JSON into a SQLite database table: https://sqlite-utils.datasette.io/en/stable/cli.html#inserti...

It can also be used to run SQL queries against an in-memory database created from one or more JSON or CSV imports: https://simonwillison.net/2021/Jun/19/sqlite-utils-memory/


If you have an MS office suite the power query editor can expand JSON to columns. Doesn't result in a table that is normalized per se, but it is quite a powerful tool overall. Not really a Microsoft fan, but what they provide here is not bad at all.


Have you looked at Millercsv or jq?


There’s a message saying “incompatible device”. I’m using an iPhone.


The button leads to the editor page which you can acces from the main navigation, it’s weird that the button is disabled on mobile while the editor works fine.


Same but with Android, makes sense this would be more of a desktop experience though


A hint on which kind of device is considered compatible would've been nice. I didn't expect this to be desktop-only.


Opening on iOS I see an "Incompatible Device" notice on the page. Does the demo only work on desktop?


Same on Android with Brave. Seems a safe assumption that mobile is an afterthought for the product.


Looks good.

Slight quibble, JSON with large value fields (eg: 4K text as a single line) blow out the containing box dimensions in the web visualiser.

Maybe there's a flag to clip | wrap such values, if so I missed ny option to toggle it.

( I used MediaInfoCLI --output=JSON on some multitrack files from handbrake, the encode argument flags are a single large value )


ADDENDUM:

There's a -><- Collapse nodes | Expand Nodes toggle on the RHS vertical toolbar of the web visual editor.

Still appears to be a slight issue with very large nodes (because of very long lines as values) scaling out of the view and being tricky to navigate into view again.

Still a handy tool for certain JSON structures for that first overview.


This is pretty awesome. I wonder how this scales. Like if I wanted to visualize a graph with millions of nodes, would it make sense to copy a whole JSON blob into it?

One of my side projects is called GraphJSON (https://graphjson.com), where we took the opposite approach. Log events (kind of like nodes in your graph) in a segment/mixpanel/amplitude way and then use SQL to stitch these events together. Currently it just does basic visualizations like lines and tables, but it'd be awesome to do the flow charts you've created. Perhaps there's opportunity for partnership?


Having an extra box for nested fields is somewhat annoying and space wasting, I think. Can that be switched on/off? From a drawing perspective it is easier, but it seems it should be possible to do away with the extra box.


That was my first thought as well.


I've been looking for something visual like this that can generate JSON Schemas. You would be able to visit any "node", right-click, and specify the constraints you're looking to add to the schema...


Looks like a cool project and I love that it is open source.

But naming a graph visualization tool using the same word as the Microsoft Flowchart visualization tool would make me somewhat nervous since it can cause "brand confusion." Granted I can't find a trademark listed for Visio specifically (maybe the name is too generic) so may be all good.


Cool, but when I loaded something that would help to visualize (a trace of a single block of ethereum) it just died. The JSON is 374KB.


I tried to use it once to visualize a 114K lines JSON it simply just died. I even tried to run it locally but no luck.


why is it its own app? is it available a vscode/jupyter plugin?


Probably just me, but the "members" and "powers" arrays in the example should be in the same box as their siblings. When presented in another box joined with arrow, to me it seems to introduce hierarchy that isn't there. Probably I'm unaware of some convention used here.


This looks like it might he useful for migrating pre-typescript code to Typescript. Identifying permutations of otherwise similar objects can be a pain, and sometimes similar APIs will return fields that have the same property name but only contain a small subset of data.


Pedantry - I clicked on the link wondering how it would represent cycles in the JSON, then I found it is a tree. Should the strap line be changed to "Visualize JSON data into trees" :).


I get "Incompatible device" error on Huawei P30 Pro, a very good smartphone.


There's also this tool we built a while ago to break down JSON size by key. https://www.debugbear.com/json-size-analyzer


That's really cool. One change would be for nested structures I wouldn't put and arrow but have it be a property with the rest of the properties that then has an arrow to the contents.


Something that I am currently struggling at my job is how can I automatically convert everything in a JSON into a table. I'm writing my own "macros" to deal with it but it's far from ideal yet.


You may also find Graphize interesting https://apvarun.github.io/graphize/


i think similarly, this db will tx arbitrary json and let you query it.

https://github.com/quoll/asami


Very cool! This is close to being a perfect mind-map creation tool. Text wrapping would be nice. It can be done manually by adding \n, but that has to be done manually.


Is anyone aware of a good desktop application for visually exploring a JSON data set and running queries?

I've found good online tools, but not a good desktop app.


This is a very good one for understanding API results, so you can debug what the properties are. For bigger ones, we are working on Dadroit Viewer.


Neat-o, I'll give this a whirl next week, will definitely help parsing the garbage used in Airflow config files I'm always debugging.


As someone that works with complex json objects on an almost daily basis, this looks like it will become part of my daily toolkit - nice job.


I was expecting a JSON-to-DOT transformer and a new graphviz backend (if that's at all necessary).



It looks like the natural evolution of tools like jsonviewer.stack.hu


Could someone point what it uses to draw the tree chart?



Excellent tool for developers, I use it all the time


This is really cool! Looks great.


What is the use case for this?


This will be the first project that I will be sponsoring...


Where has this been for all this time.


Very nice


very nice. thank you!


Cool tool, thanks for sharing. Would be great to have a version as a VS Code extension, imagine using it directly inside VS Code <3


+1 that


Likewise. This will save me hours of whiteboard drawing.


I thought this was a new feature in Microsoft Visio initially. Would “JSON Visio” be a breach of their trademark?

https://trademarks.justia.com/742/75/visio-74275413.html


Only matters if Microsoft sues. GitHub-owner era Microsoft tends to want to stay in the open source community’s good graces. (Plus I’m sure the owner would just change the name if MS asked, anyway)

That being said, this is also a diagramming tool… I probably would recommend changing it


They'd probably (or I hope they would) ask nicely first, cease-and-desist second, and sue as a last resort.

Whether or not Microsoft allows the use may not be fully at their discretion; or rather their earlier choices could tie their hands in regards to later choices if things go south.

This is a short read on the kinds of issues that start to crop up when you don't agressively enforce your trademarks:

https://www.forbes.com/sites/oliverherzfeld/2013/02/28/failu...


gonna be tough to prove damages


(We've since changed the title and URL by the submitter's request.)




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

Search: