這些都是常見的數據結構事實上大部分現代計算機語言都以某種形式支持它們這使得一種數據格式在同樣基於這些結構的編程語言之間交換成為可能,當JSON轉化為XML時,還有一些細節需要注意,這些細節,很多開源的XML轉JSON代碼裡面都沒有應用到,我推薦的XML 轉換JSON格式的時候額外遵循的規則:
- <root>
- <node1>node1_value</node1>
- <node2>node2_value</node2>
- <root>
- 轉化後:
- var JSonObj = {
- root : {
- 'node1' : {
- '$' : 'node1_value'
- }, //當然,這裡也可以為 $ : 'node1_value',但是推薦Dic名字加入引號的方式
- 'node2' : {
- '$' : 'node2_value'
- }
- }
- }
- 2 XML Attribute,應該作為"$"字符開頭的,“子集合,值”的方式轉化,例如:
- <root root_att1="root_att1_value" root_att2="root_att2_value">
- <node1 node1_att1="node1_att1_value" node1_att2="node1_att2_value">node1_value</node1>
- <node2 node2_att1="node2_att1_value" node2_att2="node2_att2_value">node2_value</node2>
- </root>
- 轉化後:
- var JSonObj = {
- root : {
- '$root_att1' : 'root_att1_value',
- '$root_att2' : 'root_att2_value',
- 'node1' : {
- '$' : 'node1_value',
- '$node1_att1' : 'node1_att1_value',
- '$node1_att2' : 'node1_att2_value'
- },
- 'node2' : {
- '$' : 'node2_value',
- '$node2_att1' : 'node2_att1_value',
- '$node2_att2' : 'node2_att2_value'
- }
- }
- }
大家可以看到,轉換過程中頻繁使用到字符"$",這一點很關鍵,因為如果Attribute也采用和Child Element相同的方式轉化,那麼將產生子元素的歧義,後果是,一旦發生XML -> JSON轉化,將不可能准確的進行此操作的逆過程,即生成的JSON無法轉化為之前的XML。
此這裡使用XML Element和XML Attribute中都不可能出現,而JSON轉化中允許的"$"字符,標識XML Attribute(熟悉JS著名類庫Prototype的朋友,對這個字符應該很熟悉 :)),讓XML和JSON互相轉化的過程完全可逆。
當然,本文沒有提到XML Namespace和XML其它特殊元素,如<!DOCTYPE>,<!ENTITY>標簽。原因是,我認為希望轉換為JSON的XML應該事先由XMLDOM做處理,簡化並規避轉化過程中可能出現的很多特殊的因素,以便讓XML -> JSON轉化過程專注於數據格式本身,而更加通俗順暢;因此,這些因素可以認為不在本文討論的格式轉化范圍內。