Extending the python json package; to treat path structures, with nested directories and multiple .json files, as a single JSON.
Project description
JSON Extended
A python module to extend the json package; treating path structures, with nested directories and multiple .json files, as a single json.
It provides:
Functions for decoding/encoding between the on-disk JSON structure and in-memory nested dictionary structure, including
on-disk indexing of the json structure (using the ijson package)
extended data type serialisation (numpy.ndarray, Decimals, pint.Quantities)
Functions for viewing and manipulating the nested dictionaries
including Javascript rendered, expandable tree in the Jupyter Notebook
Units schema concept to apply and convert physical units (using the pint package)
Parser abstract class for dealing with converting other file formats to JSON
Example
Data Folders JSONisation
import jsonextended as ejson
path = ejson.get_test_path()
ejson.json_keys(path)
['dir1', 'dir2', 'dir3']
jdict1 = ejson.json_to_dict(path)
ejson.dict_pprint(jdict1,depth=2)
dir1: dir1_1: {...} file1: {...} file2: {...} dir2: file1: {...} dir3:
Nested Dict Manipulation
jdict2 = ejson.json_to_dict(path,['dir1','file1'])
ejson.dict_pprint(jdict2,depth=1)
initial: {...} meta: {...} optimised: {...} units: {...}
filtered = ejson.dict_filter_keys(jdict2,['vol*'],use_wildcards=True)
ejson.dict_pprint(filtered)
initial: crystallographic: volume: 924.62752781 primitive: volume: 462.313764 optimised: crystallographic: volume: 1063.98960509 primitive: volume: 531.994803
ejson.dict_pprint(ejson.dict_flatten(filtered))
('initial', 'crystallographic', 'volume'): 924.62752781 ('initial', 'primitive', 'volume'): 462.313764 ('optimised', 'crystallographic', 'volume'): 1063.98960509 ('optimised', 'primitive', 'volume'): 531.994803
Units Schema
from jsonextended.units import apply_unitschema, split_quantities
withunits = apply_unitschema(filtered,{'volume':'angstrom^3'})
ejson.dict_pprint(withunits)
initial: crystallographic: volume: 924.62752781 Å ** 3 primitive: volume: 462.313764 Å ** 3 optimised: crystallographic: volume: 1063.98960509 Å ** 3 primitive: volume: 531.994803 Å ** 3
newunits = apply_unitschema(withunits,{'volume':'nm^3'})
ejson.dict_pprint(newunits)
initial: crystallographic: volume: 0.92462752781 nm ** 3 primitive: volume: 0.462313764 nm ** 3 optimised: crystallographic: volume: 1.06398960509 nm ** 3 primitive: volume: 0.531994803 nm ** 3
ejson.dict_pprint(split_quantities(newunits),depth=4)
initial: crystallographic: volume: magnitude: 0.92462752781 units: nanometer ** 3 primitive: volume: magnitude: 0.462313764 units: nanometer ** 3 optimised: crystallographic: volume: magnitude: 1.06398960509 units: nanometer ** 3 primitive: volume: magnitude: 0.531994803 units: nanometer ** 3
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for jsonextended-0.1.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 01568bb93ca1627d3743dafdf281acee96bd983b2fba5266831c03b47e6d6c90 |
|
MD5 | cea86ed9e0c8eb219278873605d2c69e |
|
BLAKE2b-256 | cb5b3127005519a690f0f7660db788023f719b2e8cb64f95ac71df97d49bc6b5 |