how does that help when you want to implement a JSON-based protocol ?
E.g., an object's "foobar" field is always an array of int, and won't suddenly become a string from one invocation to the next.
It seems incredibly strange that we're somehow not leveraging this.
But this article isn't about those protocols. It's about JSON.
Here's a pure-JS solution: https://github.com/fastify/fast-json-stringify
If only… I had to figure out how to deserialize a JSON API where a field could be: a) an object X, b) an array of X, or c) a string (mapping to X.Y)
http://amzn.github.io/ion-docs/
https://developers.google.com/protocol-buffers
https://google.github.io/flatbuffers/
ProtoBuf requires a schema for the document to be known ahead of time and involves deserialization; Ion is more like JSON in that it's self-describing, but has a rich set of data types as well as annotations on fields to further describe meaning. FlatBuffers requires a schema and provides access to the without parsing/unpacking.
On the other hand, if you're building a service and specifying its interface, rather than just specifying a data format, then there are tools like Smithy, gRPC, and Thrift.
Do you mean "JSON with a schema" (there are multiple such) or "JSON decoding to static types" (without reflection).
JSON is popular because it's schemaless; storing and versioning schemas is its own nightmare of inconsistent and inefficient hacks.
However, in practice, JSON messages almost always have an implied schema. Figuring it out on the fly shouldn't be too hard - just apply the JIT and type inference technologies that compilers have already used for decades.
(Not a problem with an immediately obvious solution, but that's why we're here, no?)
Typed json already exists in various attempts eg tjson
Really I think the problem is that JSON is great when your schema is still in flux -- once it's public/stable, it makes sense to want to strictly encode the current schema.
The solution then is that you really want a way to trivially transition from "implied schema" to "strict schema" -- though a typed json won't help you too much because the larger trouble is figuring out what your schema is in practice. I guess you really want either a code analysis tool to determine it, or more likely an automated tool to take eg a list of json responses (probably based on a test suite/code coverage) and produce a typed json schema that you can simply drop into your public API
GraphQL goes in this direction by enforcing type checks, but is designed for web frontends...