Amazon open-sources Ion – a binary and text interchangable, typed JSON-superset
To think about the difference between serialization formats, here&#x27;s an analogy I hope will help.<p>Protocol Buffers (and I think Thrift, and maybe Avro) are sort of like C or C++: you declare your types ahead of time, and then you take some binary payload and &quot;cast&quot; it (parse it actually) into your predefined type.  If those bytes weren&#x27;t actually serialized as that type, you&#x27;ll get garbage.  On the plus side, the fact that you declared your types statically means that you get lots of useful compile-time checking and everything is really efficient.  It&#x27;s also nice because you can use the schema file (ie. .proto files) to declare your schema formally and document everything.<p>JSON and Ion are more like a Python&#x2F;Javascript object&#x2F;dict.  Objects are just attribute-value bags.  If you say it has field fooBar at runtime, now it does!  When you parse, you don&#x27;t have to know what message type you are expecting, because the key names are all encoded on the wire.  On the downside, if you misspell a key name, nothing is going to warn you about it.  And things aren&#x27;t quite as efficient because the general representation has to be a hash map where every value is dynamically typed.  On the plus side, you never have to worry about losing your schema file.<p>I think this is a case where &quot;strongly typed&quot; isn&#x27;t the clearest way to think about it.  It&#x27;s &quot;statically typed&quot; vs. &quot;dynamically typed&quot; that is the useful distinction.