

RFC 7159 permits JSON strings to contain Unicode escape sequences denoted by \u XXXX. Attempts to directly include characters that cannot be represented in the database encoding will fail conversely, characters that can be represented in the database encoding but not in UTF8 will be allowed. It is therefore not possible for the JSON types to conform rigidly to the JSON specification unless the database encoding is UTF8. RFC 7159 specifies that JSON strings should be encoded in UTF8. In general, most applications should prefer to store JSON data as jsonb, unless there are quite specialized needs, such as legacy assumptions about ordering of object keys. If duplicate keys are specified in the input, only the last value is kept.

(The processing functions consider the last value as the operative one.) By contrast, jsonb does not preserve white space, does not preserve the order of object keys, and does not keep duplicate object keys. Also, if a JSON object within the value contains the same key more than once, all the key/value pairs are kept. jsonb also supports indexing, which can be a significant advantage.īecause the json type stores an exact copy of the input text, it will preserve semantically-insignificant white space between tokens, as well as the order of keys within JSON objects. The json data type stores an exact copy of the input text, which processing functions must reparse on each execution while jsonb data is stored in a decomposed binary format that makes it slightly slower to input due to added conversion overhead, but significantly faster to process, since no reparsing is needed. The major practical difference is one of efficiency. The json and jsonb data types accept almost identical sets of values as input. To implement efficient query mechanisms for these data types, PostgreSQL also provides the jsonpath data type described in Section 8.14.7. PostgreSQL offers two types for storing JSON data: json and jsonb. There are also assorted JSON-specific functions and operators available for data stored in these data types see Section 9.16. Such data can also be stored as text, but the JSON data types have the advantage of enforcing that each stored value is valid according to the JSON rules. JSON data types are for storing JSON (JavaScript Object Notation) data, as specified in RFC 7159.
