Hacker News new | ask | show | jobs
by noctune 1147 days ago
JSON is fine for inter-machine communication (like APIs). It's IMO terrible for human-to-machine communication (like configs), which is why there are so many alternatives trying to improve in this space (TOML, YAML, RON, etc.).
7 comments

Let's not forget KDL! : https://kdl.dev/
For inter-machine communication TLV binary formats are far superior. Simplicity of parsing, efficiency. Can't compete.
JSON still wins because everything already has a JSON parser.
Only when various performance metrics are not important enough to consider alternatives.
If performance matters, TLV doesn't cut it either, you need fixed-offset fields. Self-describing binary formats like CBOR, BSON, bencode, DER, UBJSON, etc fall between two stools, being less hackable than JSON and slower than schema-driven binary formats, which is why they are all moribund today.
Everything has JSON because everything has a web browser with JS these days. Calculation can change if browsers stop shipping or stop shipping with JS.
Dhall is the most interesting alternative because it can be compiled to JSON easily
After trying both Dhall and Cuelang, I really prefer the latter.

But this turns out to support OP's point. JSON is good enough, and there are many alternatives that we are debating and don't agree on.

So if you have to pick something, and I have to pick something, since we don't agree, we will fallback on JSON.

This may be right for a big distributed open source project or something, but most things I work on are proprietary within companies, and in that case it's easy to just pick something better and standardize on that. My current company is pretty much standardized on yaml, which isn't my favorite, but it's fine and better than json and we don't argue about it much. Things get serialized to json pretty often, but most stuff that is checked in and intended to be human readable is not json. A different company could easily pick cue or whatever else and it would work just as well.
I think this is a neglected point. For application config, the scope over which standardisation pays off is smaller than for data. It can be company-sized. Or language-sized - if all Ruby library use YAML, that's great for Rubyists; if all Java apps use properties files, that's, believe it nor not, pretty great for Java programmers.
Huh, yaml is just all around the worst on any metric. I would much rather stick to xml even.
Like I said, yaml isn't my favorite either, but this is silly hyperbole; xml is way harder for a human to read and write.
Worse is better, yet again.
man, nailed that
That's like the least interesting feature from Dhall, and also probably one of the most common features of any new format. Not sure I could mention any even semi-popular format that cannot easily be converted to JSON.
https://dhall-lang.org/

Cool indeed. I wonder how you can supply it with types from the program that consumes the config.

My Gradle config is in Kotlin these days. Kotlin, besides being a full blown prog lang, has nice features for config specs (map/list literals, typed, eDSL syntax). Though it is an enormous dependency (way to big for a project that just needs a config file format).

The bigger Dhall type libraries are usually generated from OpenAPI specs - there is a core package that consumes them.

If your language has an OpenAPI library, you can create a hello-world web app that exposes your configuration object as an HTTP endpoint, and generate Dhall types from that.

HOCON is a great human-readable alternative to JSON. It's a superset of JSON with lots of cool features that make it both more readable and easier to use.

Here's a rundown of HOCON's main features: https://github.com/lightbend/config#features-of-hocon

I have had great experience with HOCON. I miss it in non-JVM languages.
JSON is perfectly human readable. Anyone claiming otherwise hasn't seen a binary format.

Where JSON mainly fails as config format is lack of comments. Comment provide help and structure when editing. While allowing to toggle functionality. Which is where trailing commas help.

Binary format is perfectly human readable. Anyone claiming otherwise hasn't seen an encrypted binary format.
Encrypted binary format is perfectly human readable. It's not my fault you weren't born a savant. Anyone claiming otherwise hasn't seen white noise. /cj
I would say I've mostly landed on JSON by default and TOML for configs when possible. Otherwise, that ends up being JSON too.
Lets spend months replacing a thing that actually currently works with a slightly nicer to read file format with new and exciting bugs?

Use a prettifier plugin in your editor or squint, silly human. Trailing-comma-on-write-annoyance-adjuster, bada-bing, bada-boom. Most of the peeves can be hidden with good tooling. This Ron thing makes sense because of Serde not because it is prettier.