Show me a better text format for serializing
3 years ago by onlinepersona to c/programmer_humor
And I'll show you YAML
(a continuation of this post)
JSON for serialization all the way. It’s simple and to the point. It does one thing and does it well. There’s little room for annoying surprises. Any JSON can easily be minified and prettified back and forth. If you want it in binary format you can convert it to BSON.
Yaml is too much of a feature creep. It tries to do way too many things at the same time. There are so many traps to fall into if you’re not cautious enough. The same thing can be written in multitudes of ways.
Yes, but whoever decided that json can't have trailing commas has my ire.
{ "a": 1,
"b": 2, <-- nope
}
There was some other pitfall I can't remember around missing keys and undefined, too, but I can't remember it now.
Trailing commas are supported in json5, as well as comments
I'm pretty sure you can have trailing commas...
Good to know. Must be why I thought you could. Thanks.
My problem with yaml is if you truncate it at any random spot, there's a high likelihood it's still valid yaml. I don't like the idea that things can continue without even knowing there's a problem. The single opening and closing curly braces enclosing a json object is all it takes to at least know you didn't receive the entire message. Toml has the same issue. I'll stick with json when it makes sense.
Quite like YAML, XML has too many stuff in it. While a lot of parsers are not standard compliant and safe, if there's any chance the stuff you include on your code can evolve into a fully featured parser, including it is something to avoid.
There is this language called KDL that looks interesting.
Serializing? For serializing you probably want performance above all else. I'm saying this without checking any benchmark, but I'm sure yaml is more expensive to parse than other formats where indentation don't have meaning.
For human readability: it has to be readable (and writeable) by all humans. I know (a lot of people) that dislike yaml, toml and XML. I don't know of a single person that struggles to read/write json, there is a clear winner.
JSON would be perfect if it allowed for comments. But it doesn't and that alone is enough for me to prefer YAML over JSON. Yes, JSON is understandable without any learning curve, but having a learning curve is not always bad. YAML provides a major benefit that is worth the learning curve and doesn't have the issues that XML has (which is that there is no way to understand an XML without also having the XSD for it)
If a comment isn't part of the semantic content of a JSON object it has no business being there. JSON models data, it's not markup language for writing config files.
You can use comments in JSON schema (in a standardized way) when they are semantically relevant: https://json-schema.org/...
For the data interchange format, comments aren't part of the JSON grammar but the option to parse non-JSON values is left open to the implementation. Many implementations do detect (and ignore) comments indicated by e.g. # or //.
I've disagreed with JavaScript before, what makes you think I won't do it again?
Anyway, anything using JSON as a config language will also certainly use a JSON interpreter that can ignore comments. Sure that's "implementation specific," but so is a config file. You wouldn't use "MyApplication.config.json" outside the context of MyApplication loading its own configuration, so there's no need for it to be strictly compliant JSON as long as it plays nicely with most text editors.
Serializing isn't necessarily about performance, or we'd just use protobuf or similar. I agree Json is a great all rounder. Combine with JSON object schema to define sophisticated DSLs that are still readable, plain JSON. TOML is nice as a configuration language, but its main appeal (readability) suffers when applied to complex modeling tasks. XML is quite verbose and maybe takes the "custom DSL" idea a little too far. YAML is a mistake.
I don't know why we're fucking about trying to use text editors to manipulate structured data.
Yeah, it's convenient to just be able to use a basic text editor, but we're not trying to cram it all on a floppy disk here. I'm sure we could have a nice structured data editor somewhere for all those XML, JSON and YAML files we're supposed to maintain every day.
Ah, well I love that policy (types being in code, not configs). FWIW I sometimes use it as a hand-edited document, with a small type-specifying file, to generate json/yaml/toml for other programs to load.
Json. Your move, Joker.
puts the json in the yaml parser
Your move, foolish mortal
YAML is pretty good for readability, pretty awful for writability
Rule of thumb: valid json is valid yaml. If you're ever unsure, do it the old fashioned way.
I really don’t see how that’s true.
You’re telling me this is valid yaml?
{ firstName: “Intensely” }
How is that yaml?
Don't listen to me, put that in a yaml validator for yourself: https://yamllint.com
text?
@programming.dev
Welcome to Programmer Humor!
This is a place where you can post jokes, memes, humor, etc. related to programming!
For sharing awful code theres also Programming Horror.
go to feed...
@programming.dev
Welcome to Programmer Humor!
This is a place where you can post jokes, memes, humor, etc. related to programming!
For sharing awful code theres also Programming Horror.
go to feed...
Norway.
Ups. Sorry, I meant "NO".
save