Custom JSON decoder that allows construction of a new ``Smi``
        instance from a decoded JSON object.

        :param encoded: a JSON decoded object literal (a dict)

        :returns: "encoded" or one of the these objects: :class:`Smi`,
            :class:`MzmlScan`, :class:`MzmlProduct`, :class:`MzmlPrecursor`

def jsonHook(encoded):
        """Custom JSON decoder that allows construction of a new ``Smi``
        instance from a decoded JSON object.

        :param encoded: a JSON decoded object literal (a dict)

        :returns: "encoded" or one of the these objects: :class:`Smi`,
            :class:`MzmlScan`, :class:`MzmlProduct`, :class:`MzmlPrecursor`
        """
        if '__Smi__' in encoded:
            return Smi._fromJSON(encoded['__Smi__'])
        elif '__MzmlScan__' in encoded:
            return MzmlScan._fromJSON(encoded['__MzmlScan__'])
        elif '__MzmlProduct__' in encoded:
            return MzmlProduct._fromJSON(encoded['__MzmlProduct__'])
        elif '__MzmlPrecursor__' in encoded:
            return MzmlPrecursor._fromJSON(encoded['__MzmlPrecursor__'])
        else:
            return encoded