Source code for matchms.exporting.save_as_json
import json
from typing import List
import numpy
from ..Spectrum import Spectrum
[docs]def save_as_json(spectrums: List[Spectrum], filename: str):
"""Save spectrum(s) as json file.
:py:attr:`~matchms.Spectrum.losses` of spectrum will not be saved.
Example:
.. code-block:: python
import numpy
from matchms import Spectrum
from matchms.exporting import save_as_json
# Create dummy spectrum
spectrum = Spectrum(mz=numpy.array([100, 200, 300], dtype="float"),
intensities=numpy.array([10, 10, 500], dtype="float"),
metadata={"charge": -1,
"inchi": '"InChI=1S/C6H12"',
"precursor_mz": 222.2})
# Write spectrum to test file
save_as_json(spectrum, "test.json")
Parameters
----------
spectrums:
Expected input is a list of :py:class:`~matchms.Spectrum.Spectrum` objects.
filename:
Provide filename to save spectrum(s).
"""
if not isinstance(spectrums, list):
# Assume that input was single Spectrum
spectrums = [spectrums]
# Write to json file
with open(filename, 'w', encoding="utf-8") as fout:
json.dump(spectrums, fout, cls=SpectrumJSONEncoder)
[docs]class SpectrumJSONEncoder(json.JSONEncoder):
# See https://github.com/PyCQA/pylint/issues/414 for reference
[docs] def default(self, o):
"""JSON Encoder which can encode a :py:class:`~matchms.Spectrum.Spectrum` object"""
if isinstance(o, Spectrum):
spec = o.clone()
peaks_list = numpy.vstack((spec.peaks.mz, spec.peaks.intensities)).T.tolist()
# Convert matchms.Spectrum() into dictionaries
spectrum_dict = {key: spec.metadata[key] for key in spec.metadata}
spectrum_dict["peaks_json"] = peaks_list
return spectrum_dict
return json.JSONEncoder.default(self, o)