Hi Eric, Eric Schulte writes: > This should work in a recent Emacs. > > (require 'json) > (defun org-as-json-to-file (&optional path) > "Export the current Org-mode buffer as JSON to the supplied PATH." > (interactive "Fwrite to file: ") > (let ((tree (org-element-parse-buffer))) > (org-element-map tree > (append org-element-all-objects org-element-all-elements) > (lambda (el) (org-element-put-property el :parent nil))) > (with-temp-file path > (insert (json-encode tree))))) Thanks. With this, Nicolas's and all the other input I've got something working now. There was still one small issue I found with this last round. The :structure property also causes an error inside json.el like: json-encode-key: Bad JSON object key: 105 But, for now, nulling :structure in the same way as :parent let's me chain org->JSON->Python! The first elisp code block in the test doc below works. Thanks for all the patient help from everyone. I've learned a lot. -Brett. #+TITLE: The Title. Blah blah blah. * A heading. This uses http://edward.oconnor.cx/2006/03/json.el - foo - bar - baz #+BEGIN_SRC elisp (require 'json) (let* ((tree (org-element-parse-buffer 'object nil))) (org-element-map tree (append org-element-all-elements org-element-all-objects '(plain-text)) (lambda (x) (if (org-element-property :parent x) (org-element-put-property x :parent "none")) (if (org-element-property :structure x) (org-element-put-property x :structure "none")) ;; (if (eq (org-element-type x) 'plain-text) ;; (org-element-set-contents x (substring-no-properties ;; (org-element-contents x)))) )) (write-region (json-encode tree) ;(prin1-to-string tree) nil "foo.dat")) #+END_SRC #+RESULTS: * From Eric Schultz #+BEGIN_SRC elisp (require 'json) (defun org-as-json-to-file (&optional path) "Export the current Org-mode buffer as JSON to the supplied PATH." (interactive "Fwrite to file: ") (let ((tree (org-element-parse-buffer))) (org-element-map tree (append org-element-all-objects org-element-all-elements) (lambda (el) (org-element-put-property el :parent "none"))) (with-temp-file path (insert (json-encode tree))))) (org-as-json-to-file "eric.txt") #+END_SRC * Try some hand written data #+BEGIN_SRC elisp (require 'json) (with-current-buffer (find-file-noselect "foo.dat") (let ((tree (read (current-buffer)))) (prin1-to-string (json-encode tree)))) #+END_SRC