
On 18 Dec 2008, at 7:41 pm, Belka wrote:
Oh, but JSON doesn't seem to support tree-structured data...
Sure it does. In Haskell terms, data JSON = JSON_Number Double -- not entirely clear, actually | JSON_String String -- Unicode | JSON_Array [JSON] -- order matters | JSON_Object [(String,JSON)] -- Unicode keys, order no matter It supports trees well enough that encoding XML as JSON is trivial. To a first approximation, data XML = XML_CData String | XML_Element String [(String,String)] [XML] So, xml_to_json (XML_CData s) = JSON_String s xml_to_json (XML_Elment name atts children) = JSON_Object [("n", JSON_String name), ("a", JSON_Object [(k,JSON_STRING v) | (k,v) <- atts]), ("c", JSON_Array (map xml_to_json children))] One can handle the other aspects of XML, I just couldn't be bothered. Converting JSON that represents XML to XML is straightforward. Of course the converse is true too. json_to_xml (JSON_Number x) = XML_Element "n" [] XML_CData (show x) json_to_xml (JSON_String s) = XML_Element "s" [] XML_CData s json_to_xml (JSON_Array a) = XML_Element "a" [] map json_to_xml a json_to_xml (JSON_Object o) = XML_Element "o" [] [XML_Element "e" [("k",k)] (json_to_xml v) | (k,v) <- o] Again, converting XML that represents JSON to JSON is straightward, I just don't need to show it to make the point. Also obviously, you might as well use Lisp s-expressions. If you have a choice between XML and JSON, it may be worth remembering that JSON is *far* easier to parse. I would expect a JSON parser to be faster, and more importantly, I would expect it to be more reliable.