JSON export back end for Emacs Org mode
See the documentation file for more detailed information.
(require 'ox-json)
somewhere and then use the org-export-dispatch
interactive command and select the J key for JSON export.
You can also use the ox-json-export-to-buffer
and ox-json-export-to-file
functions or any of the built-in org-export-
functions by passing 'json
as the backend
argument.
An exported document looks like:
{
"$$data_type": "org-document",
"properties": {
"title": ["Test file"],
"file_tags": ["foo","bar"],
"author": ["jlumpe"],
"creator": "Emacs 26.2 (Org mode 9.2.4)",
"date": [],
"description": ["Test file"],
"email": "jlumpe@*****.org",
"language": "en"
},
"contents": [
...
]
}
The "contents"
property is an array containing the top-level elements of the document (which will
be an optional section
element followed by any number of headline
elements).
All nodes (elements and objects) in the document tree are exported like:
{
"$$data_type": "org-node",
"type": "headline",
"ref": "orgd51ec19",
"properties": { ... },
"contents": [ ... ]
}
"type"
is the node type returned by org-element-type
and "properties"
are property names and
values obtained from org-element-property
(see documentation for the
Org element API for a complete list of all node
types and properties). ref
is a unique ID assigned to the node by Org mode's export code. Leading
colons in the property keys are omitted. "contents"
is the encoded return value of
org-element-contents
, the items of which are either more org nodes or strings.
The "$$data-type"
property is added to JSON objects to indicate the type of structured data they
contain (the exception being generic sets of key/value pairs). See the documentation for more
information.
The resulting JSON should include the correct choice of empty object ({}
),
empty list ([]
), null
, or false
for the given context, even though these are
represented as nil
in elisp (don`t get me started).
Check out the pyorg Python package, which contains tools for reading and manipulating the exported JSON data and interacting with a running Emacs process.