Source code for wavespectra.input.json
"""Read ERA5 2D Wave Spectra NetCDF files"""
import json
import datetime
import xarray as xr
from wavespectra.core.attributes import set_spec_attributes
[docs]
def read_json(filename_or_obj, date_format="%Y-%m-%dT%H:%M:%SZ"):
"""Read Spectra from json.
The wavespectra json format is produced from `SpecDataset.to_json` by running
`Dataset.to_dict` and converting times into iso8601 strings.
Args:
- filename_or_obj (str): filename or filelike object of json to read.
- date_format(str): strftime format for de-serializing datetimes.
Returns:
- dset (SpecDataset): spectra dataset object read from json file.
"""
try:
dset_dict = json.load(filename_or_obj)
except AttributeError:
with open(filename_or_obj) as fp:
dset_dict = json.load(fp)
for item in ["coords", "data_vars"]:
if "time" in dset_dict[item]:
time_strings = dset_dict[item]["time"]["data"]
times = [datetime.datetime.strptime(t, date_format) for t in time_strings]
dset_dict[item]["time"]["data"] = times
dset = xr.Dataset.from_dict(dset_dict)
set_spec_attributes(dset)
return dset