Source code for matchms.exporting.save_as_json

import json
from typing import List
from ..Spectrum import Spectrum
from ..utils import fingerprint_export_warning


[docs]def save_as_json(spectrums: List[Spectrum], filename: str, export_style: str = "matchms"): """Save spectrum(s) as json file. :py:attr:`~matchms.Spectrum.losses` of spectrum will not be saved. Example: .. code-block:: python import numpy as np from matchms import Spectrum from matchms.exporting import save_as_json # Create dummy spectrum spectrum = Spectrum(mz=np.array([100, 200, 300], dtype="float"), intensities=np.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). export_style: Converts the keys to the required export style. One of ["matchms", "massbank", "nist", "riken", "gnps"]. Default is "matchms" """ if not isinstance(spectrums, list): # Assume that input was single Spectrum spectrums = [spectrums] fingerprint_export_warning(spectrums) # Write to json file encoder_class = create_spectrum_json_encoder(export_style) with open(filename, "w", encoding="utf-8") as fout: json.dump(spectrums, fout, cls=encoder_class)
def create_spectrum_json_encoder(export_style): class CustomSpectrumJSONEncoder(json.JSONEncoder): def default(self, o): """JSON Encoder for a matchms.Spectrum.Spectrum object""" if isinstance(o, Spectrum): spec = o.clone().to_dict(export_style) spec.pop("fingerprint", None) return spec return super().default(o) return CustomSpectrumJSONEncoder