esa-esdl / esdl-core

ESDL Cube Generation and Access API
GNU General Public License v3.0
15 stars 6 forks source link

Invalid JSON in .zattrs file #75

Open meggart opened 5 years ago

meggart commented 5 years ago

I have problems reading the new datacubes from the Julia API, because the attributes contain some invalid JSON, for example:

jovyan@ffd431271abc:~/.julia/packages/CMake/ZGawK/deps/downloads$ cat /home/jovyan/work/datacube/ESDCv2.0.0/esdc-8d-0.25deg-184x90x90-2.0.0.zarr/Rg/.zattrs
{
    "ID": 2,
    "_ARRAY_DIMENSIONS": [
        "time",
        "lat",
        "lon"
    ],
    "esa_cci_path": NaN,
    "long_name": "Downwelling shortwave radiation",
    "orig_version": "15.10.2017",
    "project_name": "BESS",
    "time_coverage_end": "2010-12-31",
    "time_coverage_resolution": "P8D",
    "time_coverage_start": "2000-03-01",
    "url": "http://environment.snu.ac.kr/bess_rad/"

This contains the entry NaN which should be converted to null according to JSON spec. I don't know if the error comes from the xarray, zarr or some other python package, but could we work around this issue by setting non-existing attributes in python to either None, which should be converted to null when encoding to JSON or to empty strings?

meggart commented 5 years ago

Here is the relevant section in the python module json.dump documentation https://docs.python.org/3/library/json.html:

If allow_nan is false (default: True), then it will be a ValueError to serialize out of range float values (nan, inf, -inf) in strict compliance of the JSON specification. If allow_nan is true, their JavaScript equivalents (NaN, Infinity, -Infinity) will be used.

So they do not adhere to JSON specs by default.