Source code for radical.utils.json_io

# pylint: disable=unused-import,import-error,no-name-in-module,eval-used,unspecified-encoding

__author__    = 'Radical.Utils Development Team (Andre Merzky)'
__copyright__ = 'Copyright 2013, RADICAL@Rutgers'
__license__   = 'MIT'


import re

from .serialize import to_json, from_json
from .misc      import as_string, ru_open


# ------------------------------------------------------------------------------
#
[docs]def read_json(fname, filter_comments=True): ''' Comments line in the form of # some json data or text are stripped from json before parsing: import pprint pprint.pprint(read_json("my_file.json")) ''' with ru_open(fname) as f: try: output = parse_json(f.read(), filter_comments) except ValueError as e: raise ValueError('error parsing %s: %s' % (fname, e)) from e return output
# ------------------------------------------------------------------------------ #
[docs]def read_json_str(filename, filter_comments=True): ''' same as read_json, but converts unicode strings and byte arrays to ASCII strings. ''' return as_string(read_json(filename, filter_comments))
# ------------------------------------------------------------------------------ #
[docs]def write_json(data, fname): ''' thin wrapper around python's json write, for consistency of interface ''' if isinstance(fname, dict) and isinstance(data, str): # arguments were switched: accept anyway tmp = data data = fname fname = tmp with ru_open(fname, 'w') as f: f.write(to_json(data)) f.write('\n') f.flush()
# ------------------------------------------------------------------------------ #
[docs]def dumps_json(data): ''' thin wrapper around python's json write, for consistency of interface ''' return to_json(data)
# ------------------------------------------------------------------------------ #
[docs]def parse_json(json_str, filter_comments=True): ''' Comment lines in the form of # some json data or text are stripped from json before parsing ''' if filter_comments: json_str = '\n'.join([re.sub(r'^\s*#.*$', '', line) for line in json_str.split('\n')]) return from_json(json_str)
# ------------------------------------------------------------------------------ #
[docs]def parse_json_str(json_str): ''' same as parse_json, but converts unicode strings to simple strings ''' return as_string(parse_json(json_str))
# ------------------------------------------------------------------------------