闡述JSON轉(zhuǎn)化的結(jié)構(gòu)事實說明介紹
這些都是常見的數(shù)據(jù)結(jié)構(gòu)事實上大部分現(xiàn)代計算機語言都以某種形式支持它們這使得一種數(shù)據(jù)格式在同樣基于這些結(jié)構(gòu)的編程語言之間交換成為可能,當JSON轉(zhuǎn)化為XML時,還有一些細節(jié)需要注意,這些細節(jié),很多開源的XML轉(zhuǎn)JSON代碼里面都沒有應(yīng)用到,我推薦的XML 轉(zhuǎn)換JSON格式的時候額外遵循的規(guī)則:
- <root>
 - <node1>node1_value</node1>
 - <node2>node2_value</node2>
 - <root>
 - 轉(zhuǎn)化后:
 - var jsonObj = {
 - root : {
 - 'node1' : {
 - '$' : 'node1_value'
 - }, //當然,這里也可以為 $ : 'node1_value',但是推薦Dic名字加入引號的方式
 - 'node2' : {
 - '$' : 'node2_value'
 - }
 - }
 - }
 - 2 XML Attribute,應(yīng)該作為"$"字符開頭的,“子集合,值”的方式轉(zhuǎn)化,例如:
 - <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>
 - 轉(zhuǎn)化后:
 - 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'
 - }
 - }
 - }
 
大家可以看到,轉(zhuǎn)換過程中頻繁使用到字符"$",這一點很關(guān)鍵,因為如果Attribute也采用和Child Element相同的方式轉(zhuǎn)化,那么將產(chǎn)生子元素的歧義,后果是,一旦發(fā)生XML -> JSON轉(zhuǎn)化,將不可能準確的進行此操作的逆過程,即生成的JSON無法轉(zhuǎn)化為之前的XML。
此這里使用XML Element和XML Attribute中都不可能出現(xiàn),而JSON轉(zhuǎn)化中允許的"$"字符,標識XML Attribute(熟悉JS著名類庫Prototype的朋友,對這個字符應(yīng)該很熟悉 :)),讓XML和JSON互相轉(zhuǎn)化的過程完全可逆。#t#
當然,本文沒有提到XML Namespace和XML其它特殊元素,如<!DOCTYPE>,<!ENTITY>標簽。原因是,我認為希望轉(zhuǎn)換為JSON的XML應(yīng)該事先由XMLDOM做處理,簡化并規(guī)避轉(zhuǎn)化過程中可能出現(xiàn)的很多特殊的因素,以便讓XML -> JSON轉(zhuǎn)化過程專注于數(shù)據(jù)格式本身,而更加通俗順暢;因此,這些因素可以認為不在本文討論的格式轉(zhuǎn)化范圍內(nèi)。















 
 
 
 
 
 
 