JSON#

Overview#

Data structure support

+-

JSON supports array and map or object structures and many different data types including strings, numbers, boolean, null etc., but no date formats.

However, JSON does not support all data types of JavaScript: NaN and Infinity become null.

Note that the JSON syntax also don’t support comments and you have to work arround for example with a __comment__ key/value pair.

Standardisation

+

JSON has a formal strongly typed standard (see also RFC 8259). However, JSON data also contains some pitfalls due to the ambiguity of the JSON specifications:

A JSON parser MUST accept all texts that conform to the JSON grammar (RFC 7159)

and

An implementation may set limits on the size of texts that it accepts. An implementation may set limits on the maximum depth of nesting. An implementation may set limits on the range and precision of numbers. An implementation may set limits on the length and character contents of strings (RFC 7158#section-9).

Unfortunately there is neither a reference implementation nor an official test suite that would show the expected behaviour – at least JSON_Checker gives some hints.

Schema IDL

+-

Partly with JSON Schema Proposal, JSON Encoding Rules (JER), Kwalify, Rx, JSON-LD or JMESPath.

After all, there are many different validators available.

Language support

++

The JSON format is very well supported by almost every programming language.

The data structure of JSON closely represent objects in many languages for example a Python dict can be represented as JSON object, and a Python list by a JSON array.

Human readability

+-

JSON is a human-readable serialisation format but it does not support comments.

Speed

++

JSON is one of the fastest human-readable formats to serialise and deserialise.

File size

+-

JSON is in the medium range similar to YAML and TOML.

Example#

Response of the OSM-Nominatim-API

[
    {
        'place_id': 234847916,
        'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
        'osm_type': 'relation',
        'osm_id': 131761,
        'boundingbox': ['52.5200695', '52.5232601', '13.4103097', '13.4160798'],
        'lat': '52.521670650000004',
        'lon': '13.413278026558228',
        'display_name': 'Alexanderplatz, Mitte, Berlin, 10178, Deutschland',
        'class': 'highway',
        'type': 'pedestrian',
        'importance': 0.6914982526373583
    },
    {
        'place_id': 53256307,
        'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
        'osm_type': 'node',
        'osm_id': 4389211800,
        'boundingbox': ['52.5231653', '52.5232653', '13.414475', '13.414575'],
        'lat': '52.5232153',
        'lon': '13.414525',
        'display_name': 'Alexanderplatz, Alexanderstraße, Mitte, Berlin, 10178, Deutschland',
        'class': 'highway',
        'type': 'bus_stop',
        'importance': 0.22100000000000003,
        'icon': 'https://nominatim.openstreetmap.org/images/mapicons/transport_bus_stop2.p.20.png'
    },
    {
        'place_id': 90037579,
        'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
        'osm_type': 'way',
        'osm_id': 23853138,
        'boundingbox': ['52.5214702', '52.5217276', '13.4037885', '13.4045026'],
        'lat': '52.5215991',
        'lon': '13.404112295159964',
        'display_name': 'Alexander Plaza, 1, Rosenstraße, Mitte, Berlin, 10178, Deutschland',
        'class': 'tourism',
        'type': 'hotel',
        'importance': 0.11100000000000002,
        'icon': 'https://nominatim.openstreetmap.org/images/mapicons/accommodation_hotel2.p.20.png'
    }
]