闡述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代碼里面都沒有應用到,我推薦的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,應該作為"$"字符開頭的,“子集合,值”的方式轉(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的朋友,對這個字符應該很熟悉 :)),讓XML和JSON互相轉(zhuǎn)化的過程完全可逆。#t#
當然,本文沒有提到XML Namespace和XML其它特殊元素,如<!DOCTYPE>,<!ENTITY>標簽。原因是,我認為希望轉(zhuǎn)換為JSON的XML應該事先由XMLDOM做處理,簡化并規(guī)避轉(zhuǎn)化過程中可能出現(xiàn)的很多特殊的因素,以便讓XML -> JSON轉(zhuǎn)化過程專注于數(shù)據(jù)格式本身,而更加通俗順暢;因此,這些因素可以認為不在本文討論的格式轉(zhuǎn)化范圍內(nèi)。