Umformen von XML in JSON

Aus Imperia Support Wiki

Version vom 17. November 2011, 15:14 Uhr von Fboes (Diskussion | Beiträge) (Kind-Knotennamen, die mehrfach in einem Knoten vorkommen)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Generelle Regeln zum Umformen von XML in JSON. Grundvoraussetzung ist ein Schema für das umzuformende XML, dass die genaue Feststellung der Kombinationsmöglichkeiten des XML erlaubt.

Root-Knoten

Der Root-Knoten entfällt in JSON.

 <rss>
   <channel /> 
 <rss>

wird zu

 {
   "channel":""
 }

Knoten

Knoten-Namen werden zu Objekt-Eigenschaften in JSON. Knoten-Namen mit Namensräumen werden an Stelle eines : mit _ geschrieben. Die Groß- / Kleinschreibung bleibt gewahrt.

 <rss>
   <channel>
     <title />
     <atom:link />
   </channel> 
 <rss>

wird zu

 {
   "channel":{
     "title":"",
     "atom_link":""
   }
 }

Kind-Knotennamen, die mehrfach in einem Knoten vorkommen

…werden zu einer Objekteigenschaft im JSON, deren Name der Mehrzahl des ursprünglichen Tagnamens entspricht, z.B. <item> als "items". Die Eigenschaft enthält dann ein Array von Objekten.

 <rss>
   <channel>
     <title />
     <item />
     <item />
     <item />
   </channel> 
 </rss>

wird zu

 {
   "channel":{
     "title":"",
     "items:[
       "",
       "",
       ""
     ]
   }
 }

Text-Inhalte eines Knotens

… werden zu Strings respektive Integers in JSON.

 <rss>
   <channel>
     <title>Test</title>
   </channel> 
 </rss>

wird zu

 {
   "channel":{
     "title":"Test",
   }
 }

Knoten mit Attributen

Werden als Objekt geschrieben, so dass jedes Attribut eine Objekteigenschaft ist.

 <head>
   <link rel="stylesheet" type="text/css" href="style.css" /> 
 <head>

wird zu

 {
   "link":{
     "rel":"stylesheet",
     "type":"text/css",
     "href":"style.css"
   }
 }

Knoten mit Attributen und Kindknoten werden zu gleichberechtigten Kind-Eigenschaften des Objekts in JSON. Falls ein Attributname und Sub-Tag identisch sind, wird das Attribut nicht angegeben.

 <rss version="2.0">
   <channel /> 
 </rss>

wird zu

 {
   "version":"2.0",
   "channel":""
 }

Knoten mit Attributen und/oder Kindknoten und Text-Inhalten werden wie o.a. gebildet. Der Textinhalt wird aber in eine Objekteigenschaft _content ausgelagert.

 <rss version="2.0">
   <channel /> 
   Text
 </rss>

wird zu

 {
   "version":"2.0",
   "channel":"",
   "_content":"Text"
 }

Diese Vorschrift wird u.a. bei JSON-RSS verwendet.