2017-04-11 5 views
0

Hallo Ich habe xml so -Umwandlung von XML zu Json

Dies ist Knoten dieses xml-

<item col_sort='20160102' Month='Jan-2016' Week='Week 1' Date='01/02/2016' Name='A' Id='1' 
        Column1='0' Column1Agg1='1410.00' Column1Agg2='405.00' Column1Agg3='0' 
        Column2='38' Column2Agg1='2976' Column2Agg2='79' Column2Agg3='79' 
        Column3='0.32' Column3Agg1='0.56' Column3Agg2='0.41' Column3Agg3='0.41' 
        Column4='11.42' Column4Agg1='8.48' Column4Agg2='9.55' Column4Agg3='9.55' 
        Column5='8.76' Column5Agg1='2.97' Column5Agg2='9.81' Column5Agg3='9.81' 
        Column6='-1' Column6Agg1='-2' Column6Agg2='-1' Column6Agg3='-1' 
        Column7='-99' Column7Agg1='99.9' Column7Agg2='-99' Column7Agg3='-99' 
        Column8='-99.00' Column8Agg1='8.00' Column8Agg2='-99.00' Column8Agg3='-99.00' 
        Column9='17.82' Column9Agg1='9.96' Column9Agg2='17.84' Column9Agg3='17.84' 
        Column10='18.18' Column10Agg1='10.51' Column10Agg2='18.28' Column10Agg3='18.28' 
        Column11='-2' Column11Agg1='-2' Column11Agg2='-2' Column11Agg3='-2' 
        Column12='7.9' Column12Agg1='44.6' Column12Agg2='7.6' Column12Agg3='7.6' 
        Column13='12.86' Column13Agg1='10.48' Column13Agg2='12.68' Column13Agg3='12.68' /> 

Nun, hier die Agg dem Kind Knoten vorangestellt wird. Also, hier in einem Knoten haben wir alle Kinder mit dem Elternwert bewertet. Hier repräsentiert Agg1 ein Elternteil. Agg2 ist das Kind von Agg1 und Agg3 ist das Kind von Agg2. Und die Knoten, die kein Präfix haben, sind der Blattknoten.

json = [ { 
     "Month": "Dec-2016", 
     "Column1Agg1": "1410.00", 
     "Column2Agg1": "2976", 
     "Column3Agg1": "0.56", 
     "Column4Agg1": "8.48",, 
     "Column5Agg1": "2.97", 
     "Column6Agg1": "-2", 
     "Column7Agg1": "-99.9", 
     "Column8Agg1": "8.00", 
     "Column9Agg1": "9.96", 
     "Column10Agg1": "10.51", 
     "Column11Agg1": "-2", 
     "Column12Agg1": "44.6", 
     "Column13Agg1": "10.48", 
     "children" : [ 
     {"Week": "Week 1", 
     "Column1Agg2": "405.00", 
     "Column2Agg2": "79", 
     "Column3Agg2": "0.41", 
     "Column4Agg2": "9.55", 
     "Column5Agg2": "9.81", 
     "Column6Agg2": "-1", 
     "Column7Agg2": "-99", 
     "Column8Agg2": "-99.00", 
     "Column9Agg2": "17.84", 
     "Column10Agg2": "18.28", 
     "Column11Agg2": "-2", 
     "Column12Agg2": "7.6", 
     "Column13Agg2": "12.68", 
     "children" : [{ 
      "Date": "01/02/2016", 
     "Column1Agg3": "405.00", 
     "Column2Agg3": "79", 
     "Column3Agg3": "0.41", 
     "Column4Agg3": "9.55", 
     "Column5Agg3": "9.81", 
     "Column6Agg3": "-1", 
     "Column7Agg3": "-99", 
     "Column8Agg3": "-99.00", 
     "Column9Agg3": "17.84", 
     "Column10Agg3": "18.28", 
     "Column11Agg3": "-2", 
     "Column12Agg3": "7.6", 
     "Column13Agg3": "12.68", 
     "children" : [{ 
     "Name" : "A", 
     "Id" : "1", 
     "Column1": "0", 
     "Column2": "38", 
     "Column3": "0.32", 
     "Column4": "11.42", 
     "Column5": "8.76", 
     "Column6": "-1", 
     "Column7": "-99", 
     "Column8": "-99.00", 
     "Column9": "17.82", 
     "Column10": "18.18", 
     "Column11": "-2", 
     "Column12": "7.9", 
     "Column13": "12.86" 

      }] 
      }] 
      }] 
      }] 

Wie Sie diese Art von XML in JSON mit Kindern konvertieren.

Irgendwelche Ideen, wie man dies tut

+0

Bitte auch eine Frage hinzufügen. Sie haben etwas beschrieben, was ist das Problem, das Sie haben? –

+0

Öffnen Sie Google und geben Sie "javascript xml to json" ein und klicken Sie auf den ersten Link. –

+0

@TahaPaksu es wird nicht untergeordnete Knoten erstellen es wird nur konvertieren ... Ich möchte untergeordnete Knoten erstellen – shv22

Antwort

0

Ich habe dies mit Regex codiert. Sie können bei Bedarf zusätzliche Prüfungen hinzufügen.

var data = "<item col_sort='20160102' Month='Jan-2016' Week='Week 1' Date='01/02/2016' Name='A' Id='1' \ 
 
        Column1='0' Column1Agg1='1410.00' Column1Agg2='405.00' Column1Agg3='0' \ 
 
        Column2='38' Column2Agg1='2976' Column2Agg2='79' Column2Agg3='79' \ 
 
        Column3='0.32' Column3Agg1='0.56' Column3Agg2='0.41' Column3Agg3='0.41' \ 
 
        Column4='11.42' Column4Agg1='8.48' Column4Agg2='9.55' Column4Agg3='9.55'\ 
 
        Column5='8.76' Column5Agg1='2.97' Column5Agg2='9.81' Column5Agg3='9.81'\ 
 
        Column6='-1' Column6Agg1='-2' Column6Agg2='-1' Column6Agg3='-1'\ 
 
        Column7='-99' Column7Agg1='99.9' Column7Agg2='-99' Column7Agg3='-99'\ 
 
        Column8='-99.00' Column8Agg1='8.00' Column8Agg2='-99.00' Column8Agg3='-99.00'\ 
 
        Column9='17.82' Column9Agg1='9.96' Column9Agg2='17.84' Column9Agg3='17.84' \ 
 
        Column10='18.18' Column10Agg1='10.51' Column10Agg2='18.28' Column10Agg3='18.28'\ 
 
        Column11='-2' Column11Agg1='-2' Column11Agg2='-2' Column11Agg3='-2'\ 
 
        Column12='7.9' Column12Agg1='44.6' Column12Agg2='7.6' Column12Agg3='7.6' \ 
 
        Column13='12.86' Column13Agg1='10.48' Column13Agg2='12.68' Column13Agg3='12.68' />"; 
 

 
    var getChildren = function(i, search){ 
 
\t \t var result = {}; 
 
\t  var re = new RegExp("Column([0-9]+)Agg"+i+"='([0-9.-]+)'", "g"), m, p = 0; \t \t \t  
 
\t \t do { 
 
\t \t  m = re.exec(search); \t \t  \t \t  
 
\t \t  if (m) { \t \t  \t 
 
\t \t   result["Column" + m[1] + "Agg" + i] = m[2]; 
 
\t \t   p++; 
 
\t \t  } 
 
\t \t } while (m); \t \t \t 
 
    \t \t if(p>0){ 
 
\t \t \t result.children = getChildren(i+1, search); 
 
\t \t } 
 
\t \t return result; 
 
\t } 
 

 
    var m; 
 
\t var results = {}; 
 
\t 
 
\t results = getChildren(1, data); \t 
 
\t results.Month = /Month='([^']+)'/g.exec(data)[1]; 
 
\t results.children.Week = /Week='([^']+)'/g.exec(data)[1]; 
 
\t results.children.children.Date = /Date='([^']+)'/g.exec(data)[1]; 
 
\t 
 
\t console.log(results);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

danke für das ... aber geringfügiges Missverständnis Column1Agg1 ist das Elternteil und Column1 ist Blattknoten, aber in hier Ergebnis ist ich denke, dass – shv22

+0

Konnen Sie Ihr Beispiel mit dem reparieren, was Sie sagen? Ich werde meine Antwort dann ändern. –

+0

Warum hast du '/' vor jeder Zeile hinzugefügt ... nun, wie könnte ich das in meiner Antwort tun? – shv22

0

Wenn ich dies tat ich durch die Umwandlung Ihrer verrückt XML-Eingabe in etwas mehr Sanitär-, entlang der Linien beginnen würde:

<item col_sort='20160102' Month='Jan-2016' Week='Week 1' Date='01/02/2016' Name='A' Id='1'> 
    <column nr='1' value='0'> 
    <agg nr='1'>1410.00</agg> 
    <agg nr='2'>405.00</agg> 
    <agg nr='3'>0</agg> 
    </column> 
    <column nr='2' value='38'> 
    <agg nr='1'>2976</agg> 
    <agg nr='2'>79</agg> 
    <agg nr='3'>79</agg> 
    </column> 
etc 

Das ist leicht genug getan mit XSLT . Hier ist eine Skizze:

<xsl:for-each-group select="@*" group-by="f:colNr(name())"> 
    <xsl:sort select="number(current-grouping-key())"/> 
    <column nr="{current-grouping-key()}"> 
    <xsl:for-each select="current-group()"> 
     <xsl:sort select="f:aggNr(name())"> 
     <agg nr="{f:aggNr(name())}"> 
     <xsl:value-of select="."/>