diff options
author | Andrew Shadura <andrew@shadura.me> | 2015-08-20 15:58:26 +0200 |
---|---|---|
committer | Andrew Shadura <andrew@shadura.me> | 2015-08-20 15:58:26 +0200 |
commit | ff1408420159488a106492ccd11dd234967029b6 (patch) | |
tree | 473420cee1c5229a427ec4cafead1aa6c0a26800 /reconfigure/parsers/jsonparser.py |
Imported Upstream version 0.1.29
Diffstat (limited to 'reconfigure/parsers/jsonparser.py')
-rw-r--r-- | reconfigure/parsers/jsonparser.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/reconfigure/parsers/jsonparser.py b/reconfigure/parsers/jsonparser.py new file mode 100644 index 0000000..c1eaee6 --- /dev/null +++ b/reconfigure/parsers/jsonparser.py @@ -0,0 +1,35 @@ +from reconfigure.nodes import * +from reconfigure.parsers import BaseParser +import json + + +class JsonParser (BaseParser): + """ + A parser for JSON files (using ``json`` module) + """ + + def parse(self, content): + node = RootNode() + self.load_node_rec(node, json.loads(content)) + return node + + def load_node_rec(self, node, json): + for k, v in json.iteritems(): + if isinstance(v, dict): + child = Node(k) + node.children.append(child) + self.load_node_rec(child, v) + else: + node.children.append(PropertyNode(k, v)) + + def stringify(self, tree): + return json.dumps(self.save_node_rec(tree), indent=4) + + def save_node_rec(self, node): + r = {} + for child in node.children: + if isinstance(child, PropertyNode): + r[child.name] = child.value + else: + r[child.name] = self.save_node_rec(child) + return r |