Settings

Theme

JSON Crack – Visualize JSON data into graphs

jsoncrack.com

576 points by iCutMoon 4 years ago · 99 comments

Reader

geokon 4 years 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?

  • coenhyde 4 years ago

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

    • abrax3141 4 years ago

      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.

    • solardev 4 years ago

      Ads?

      • btown 4 years ago

        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.

        • samstave 4 years ago

          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!

    • ozim 4 years ago

      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.

  • dotancohen 4 years ago

    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"
                ]
            }
        ]
      }
    • geokon 4 years ago

      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.

      • dotancohen 4 years ago

        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.

        • geokon 4 years ago

          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.

  • nerdponx 4 years ago

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

  • sn9 4 years ago

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

  • bboozzoo 4 years ago

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

    • geokon 4 years ago

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

      • user5678 4 years ago

        gg=G in evil mode will do that.

        • dotancohen 4 years ago

          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.
KevinEldon 4 years ago

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

Manfred 4 years ago

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

spinaker 4 years ago

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.

yieldcrv 4 years ago

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

  • clementmas 4 years ago

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

  • wruza 4 years ago

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

hiccuphippo 4 years ago

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.

medv 4 years ago

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

  • techthumb 4 years ago

    There's also https://jless.io

    • lf-non 4 years ago

      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.

bilekas 4 years ago

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!

  • cerved 4 years ago

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

elbajo 4 years ago

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!

loxias 4 years ago

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 :/

mutant 4 years ago

You guys will love this also

https://jsonhero.io

makach 4 years ago

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.

youngNed 4 years ago

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

afandian 4 years ago

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

  • kurishutofu 4 years ago

    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.

  • exabyte 4 years ago

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

    • pvorb 4 years ago

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

ssalka 4 years ago

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

  • andrew_ 4 years ago

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

defrost 4 years ago

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 )

  • defrost 4 years ago

    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.

flurly 4 years ago

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?

auggierose 4 years ago

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.

anonu 4 years ago

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

throwaway2016a 4 years ago

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.

Canada 4 years ago

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.

  • haidev 4 years ago

    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.

Kalanos 4 years ago

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

exodust 4 years ago

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.

brailsafe 4 years ago

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.

MatthewT123 4 years ago

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" :).

bufferoverflow 4 years ago

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

mostlystatic 4 years ago

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

jhiggins777 4 years ago

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.

Ftuuky 4 years ago

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.

leetrout 4 years ago

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

blain_the_train 4 years ago

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

https://github.com/quoll/asami

jimmar 4 years ago

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.

ijidak 4 years ago

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.

Peter5 4 years ago

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.

Simon_O_Rourke 4 years ago

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.

ejb999 4 years ago

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.

einpoklum 4 years ago

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

sordina 4 years ago

Uses https://reaflow.dev

mkl95 4 years ago

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

jzer0cool 4 years ago

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

metecan 4 years ago

Excellent tool for developers, I use it all the time

droobles 4 years ago

This is really cool! Looks great.

gajus 4 years ago

What is the use case for this?

m00dy 4 years ago

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

mahesh_rm 4 years ago

Where has this been for all this time.

ystad 4 years ago

Very nice

talkingtab 4 years ago

very nice. thank you!

proboy 4 years ago

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

helsinkiandrew 4 years ago

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

  • lelandfe 4 years ago

    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

    • sbuttgereit 4 years ago

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

    • yomkippur 4 years ago

      gonna be tough to prove damages

  • dang 4 years ago

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

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection