←back to thread

Fixing JSON

(www.tbray.org)
139 points robin_reala | 4 comments | | HN request time: 0.318s | source
Show context
cies ◴[] No.12328149[source]
JSON is not optimized to be written by humans (I'd argue even JS is not well optimized for that </joke>).

There are other formats for that, like YAML and TOML[1].

When JSON is needed for human-to-computer stuff, I'd say TOML is pretty much always a better choice. A common use case for TOML is config files. And I see a lot of config in JSON lately; this makes me sad. (Though not as sad as the config-in-XML thing the Java ecosystem suffered from.)

1: https://github.com/toml-lang/toml

replies(3): >>12328239 #>>12329007 #>>12329698 #
1. crdoconnor ◴[] No.12329007[source]
TOML is kinda ugly compared to YAML.
replies(2): >>12330489 #>>12331057 #
2. ymse ◴[] No.12330489[source]
YAML is a pain to parse. And as a human, having to remember quoting string values like "yes" and "on" to prevent them from being interpreted as booleans in YAML really grinds my gears. I don't care if it's prettier; YAML can't disappear quick enough.

I wrote a haiku some years back to demonstrate how broken the Ruby implementation was.

    YAML:
      takes a no for a 'no': no
      spring,summer,fall,winter: 3,6,9,12
      the game is: on
Running it through ruby 2.3.1 yields..

    {"YAML"=>
      {"takes a no for a 'no'"=>false,
       "spring,summer,fall,winter"=>36912,
       "the game is"=>true}}
replies(1): >>12330524 #
3. crdoconnor ◴[] No.12330524[source]
I agree. That's partly why I wrote this: https://github.com/crdoconnor/strictyaml

e.g.

    >>> load(x, Map({"YAML": MapPattern(Str(), Str())}))

    {'YAML': {'spring,summer,fall,winter': '3,6,9,12',
      "takes a no for a 'no'": 'no',
      'the game is': 'on'}}


    >>> load(x, Map({"YAML": Map({"spring,summer,fall,winter": Str(), "takes a no for a 'no'": Bool(), "the game is": Bool()})}))

    {'YAML': {'spring,summer,fall,winter': '3,6,9,12',
      "takes a no for a 'no'": False,
      'the game is': True}}
4. pmlnr ◴[] No.12331057[source]
Think of it as ini 2.0.