Skip to content
Snippets Groups Projects
Commit 6d91a555 authored by martin's avatar martin
Browse files

First version of synop.py

parent 5becb2dd
No related branches found
No related tags found
No related merge requests found
synop.py 0 → 100644
"""SynopReader class
reads a nested JSON structure and flattens it for easier access"""
import json
from collections import OrderedDict
class SynopReader():
def __init__(self, filename):
"""
initializes object with filename and reads the JSON file
"""
# ToDo: interpret URL as alternative to filename and access JSON from URL if filename startswith http
with open(filename, 'r') as f:
content = f.read()
self.filename = filename
self.content = json.loads(content)
## print(self.content)
@staticmethod
def condense(d, keys=None):
"""
converts a "DWD dct" with key, value, units tags into dict entry key: (value, units)
:param d: the input dictionary
:param keys: existing key values (to avoid overwriting)
:return: dict with {key: (value, units)}
"""
print(d)
key = d.get('key', 'undefined_key')
value = d.get('value')
units = d.get('units')
# ToDo: improve this logic to make result more readable
if keys is not None and key in keys:
suffix = '123456789abcdefghijklmnopqrstuvwxyz'
key_c = [key+'_'+x for x in suffix]
for k in key_c:
if not k in keys:
key = key_c
break
return {key: (value, units)}
def process_one(self, element):
"""
browse through one part of the JSON structure and condense all information
:return: condensed dict
"""
res = OrderedDict()
# check if current element is list
if isinstance(element, list):
for item in element:
res.update(self.process_one(item))
return res
# ToDo: implement solution for list
# assume current element is dict
return self.condense(element, res.keys())
def process(self):
"""
browse through the entire JSON structure and condense all information
:return: condensed dict
"""
res = self.process_one(self.content)
print(res)
if __name__ == "__main__":
TESTDATA = "testdata/snippet_synop_dwd_opendata.json"
SynopReader(TESTDATA).process()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment