ak.to_json#
Defined in awkward.operations.ak_to_json on line 26.
- ak.to_json(array, file=None, *, line_delimited=False, num_indent_spaces=None, num_readability_spaces=0, nan_string=None, posinf_string=None, neginf_string=None, complex_record_fields=None, convert_bytes=None, convert_other=None)#
- Parameters:
array – Array-like data (anything
ak.to_layoutrecognizes).file (None, path-like, or file-like object) – If None, this function returns JSON-encoded bytes. Otherwise, this function has no return value. If a string/pathlib.Path, this function opens a file with that name, writes JSON data, and closes the file. If that path has a URI protocol (like “https://” or “s3://”), this function attempts to open the file with the fsspec library. If a file-like object with a
writemethod, this function writes to the object, but does not close it.line_delimited (bool or str) – If False, a single JSON document is written, representing the entire array or record. If True, each element of the array (or just the one record) is written on a separate line of text, separated by
"\n". If a string, such as"\r\n", it is taken as a custom line delimiter. (Useos.linesepfor a platform-dependent line delimiter.)num_indent_spaces (None or nonnegative int) – Number of spaces to indent nested elements, for pretty-printed JSON. If None, the JSON output is written on one line of text. Ignored if
line_delimitedis True or a string.num_readability_spaces (nonnegative int) – Number of spaces to include after commas (
,) and colons (:), for pretty-printed JSON.nan_string (None or str) – If not None, floating-point NaN values will be replaced with this string instead of a JSON number.
posinf_string (None or str) – If not None, floating-point positive infinity values will be replaced with this string instead of a JSON number.
neginf_string (None or str) – If not None, floating-point negative infinity values will be replaced with this string instead of a JSON number.
complex_record_fields (None or (str, str)) – If not None, defines a pair of field names to interpret records as complex numbers, such as
("real", "imag").convert_bytes (None or function) – If not None, this function is applied to all Python 3 bytes objects to produce something JSON serializable, such as a string using UTF-8 or Base64 encoding, lists of integers, etc.
convert_other (None or function) – Passed to
json.dumporjson.dumpsasdefaultto convert any other objects thatak.to_listwould return but are not JSON serializable.
Converts array (many types supported, including all Awkward Arrays and
Records) into JSON text. Returns bytes (encoded JSON) if file is None;
otherwise, this function returns nothing and writes to a file.
This function converts the array into Python objects with ak.to_list, performs
some conversions to make the data JSON serializable (nan_string,
posinf_string, neginf_string, complex_record_fields, convert_bytes,
convert_other), then uses json.dumps to return a string or json.dump
to write to a file (depending on the value of file).
If line_delimited is True or a line-delimiter string like "\r\n"/os.linesep,
the output is line-delimited JSON, variously referred to as “ldjson”, “ndjson”, and
“jsonl”. (Use an appropriate file extension!)
To pretty-print the JSON, set num_indent_spaces=4, num_readability_spaces=1 (for
example).
Awkward Array types have the following JSON translations.
ak.types.OptionType: missing values are converted into None.ak.types.ListType: converted into JSON lists.ak.types.RegularType: also converted into JSON lists. JSON (and Python) forms lose information about the regularity of list lengths.ak.types.ListTypeorak.types.RegularTypewith parameter"__array__"equal to"string": converted into JSON strings.ak.types.RecordTypewithout field names: converted into JSON objects with numbers as strings for keys.ak.types.RecordTypewith field names: converted into JSON objects.ak.types.UnionType: JSON data are naturally heterogeneous.
If the array contains any NaN (not a number), infinite values, or
imaginary/complex types, nan_string, posinf_string, and/or neginf_string
_must_ be supplied.
If the array contains any raw bytestrings ("__array__" equal to "bytestring"),
convert_bytes _must_ be supplied. To interpret as strings, use bytes.decode.
To Base64-encode, use lambda x: base64.b64encode(x).decode().
Other non-serializable types are only possible through custom behaviors that
override __getitem__ (which might return arbitrary Python objects). Use
convert_other to detect these types and convert them.
See also ak.from_json.