|
import json |
|
|
|
from .dictexporter import DictExporter |
|
|
|
|
|
class JsonExporter: |
|
""" |
|
Tree to JSON exporter. |
|
|
|
The tree is converted to a dictionary via `dictexporter` and exported to JSON. |
|
|
|
Keyword Arguments: |
|
dictexporter: Dictionary Exporter used (see :any:`DictExporter`). |
|
maxlevel (int): Limit export to this number of levels. |
|
kwargs: All other arguments are passed to |
|
:any:`json.dump`/:any:`json.dumps`. |
|
See documentation for reference. |
|
|
|
>>> from anytree import AnyNode |
|
>>> from anytree.exporter import JsonExporter |
|
>>> root = AnyNode(a="root") |
|
>>> s0 = AnyNode(a="sub0", parent=root) |
|
>>> s0a = AnyNode(a="sub0A", b="foo", parent=s0) |
|
>>> s0b = AnyNode(a="sub0B", parent=s0) |
|
>>> s1 = AnyNode(a="sub1", parent=root) |
|
|
|
>>> exporter = JsonExporter(indent=2, sort_keys=True) |
|
>>> print(exporter.export(root)) |
|
{ |
|
"a": "root", |
|
"children": [ |
|
{ |
|
"a": "sub0", |
|
"children": [ |
|
{ |
|
"a": "sub0A", |
|
"b": "foo" |
|
}, |
|
{ |
|
"a": "sub0B" |
|
} |
|
] |
|
}, |
|
{ |
|
"a": "sub1" |
|
} |
|
] |
|
} |
|
|
|
.. note:: Whenever the json output does not meet your expections, see the :any:`json` documentation. |
|
For instance, if you have unicode/ascii issues, please try `JsonExporter(..., ensure_ascii=False)`. |
|
""" |
|
|
|
def __init__(self, dictexporter=None, maxlevel=None, **kwargs): |
|
self.dictexporter = dictexporter |
|
self.maxlevel = maxlevel |
|
self.kwargs = kwargs |
|
|
|
def _export(self, node): |
|
dictexporter = self.dictexporter or DictExporter() |
|
if self.maxlevel is not None: |
|
dictexporter.maxlevel = self.maxlevel |
|
return dictexporter.export(node) |
|
|
|
def export(self, node): |
|
"""Return JSON for tree starting at `node`.""" |
|
data = self._export(node) |
|
return json.dumps(data, **self.kwargs) |
|
|
|
def write(self, node, filehandle): |
|
"""Write JSON to `filehandle` starting at `node`.""" |
|
data = self._export(node) |
|
return json.dump(data, filehandle, **self.kwargs) |
|
|