jsonb

jsonb
jsonb stores data in a decomposed binary form, not as an ASCII/UTF-8 string, but as binary code. That makes it slightly slower to input due to added conversion overhead, but significantly faster to process, since no reparsing is needed.
jsonb also supports indexing, which can be a significant advantage.
jsonb does not preserve white space, does not preserve the order of object keys, and does not keep duplicate object keys. If duplicate keys are specified in the input, only the last value is kept.
It's recommended that applications store JSON data as jsonb, unless there are quite specialized needs, such as legacy assumptions about ordering of object keys.
RFC 7159 permits JSON strings to contain Unicode escape sequences denoted by \uXXXX. The input function for jsonb doesn't allow Unicode escapes for non-ASCII characters (those above U+007F) unless the database encoding is UTF8. jsonb rejects \u0000. The reason for that is \u0000 can't be represented in the PostgreSQL's text type. jsonb insists that any use of Unicode surrogate pairs to designate characters outside the Unicode Basic Multilingual Plane be correct. Valid Unicode escapes are converted to the equivalent ASCII or UTF8 character for storage; this includes folding surrogate pairs into a single character.
When converting textual JSON input into jsonb, the primitive types described by RFC 7159 are effectively mapped onto native PostgreSQL types. jsonb rejects numbers that are outside the range of the PostgreSQL numeric data type.