2017-12-19 10 views
-4

この文字列をxml形式に変換したいと思います。この文字列をJSONに変換するにはどうすればよいですか? (JavaScriptオブジェクトを使用して)(string-> JSON-> XML)

これまでは、この '文字列'を 'オブジェクト'に入れて 'JSON形式'に変換する必要があるようです。 (と思う)

私の文字列が

"oTest^A1^BB:a1bb,oTest^A2^BB:a1cc,oTest^A1^CC:a2bb,oTest^A2^CC:a2cc" 

で、JSON形式は

{ 
"oTest": { 
    "A1": { 
     "BB": "a1bb", 
     "CC": "a1cc" 
    }, 
    "A2": { 
     "BB": "a2bb", 
     "CC": "a2cc" 
    } 
    } 
} 

され、最終的に私は、このXML形式の文字列

<oTest> 
<A1> 
    <BB>a1bb</BB> 
    <CC>a1cc</CC> 
</A1> 
<A2> 
    <BB>a2bb</BB> 
    <CC>a2cc</CC> 
</A2> 
</oTest> 

をしたいです。

は(それがJSONに変換せずに、直接XMLに変換することは可能ですか?)

私は「オブジェクト」に私の文字列を入れてみましたし、重複した値の取得に失敗しました。

私はこの

function fn_str2obj2Json(sStr) 
    { 
     var objChild1 = {}; 
     var objChild2 = {}; 
     var objRtn = {}; 

     var sStr = "oTest^A1^BB:a1bb,oTest^A2^BB:a1cc,oTest^A1^CC:a2bb,oTest^A2^CC:a2cc"; 

     var arrStr = sStr.split(','); 
     for (var i = 0; i < arrStr.length; i++) { 
      var arrSpe = arrStr[i].split('^'); 
      var sLineName = arrSpe[0]; 
      var sTankName = arrSpe[1]; 
      var sItemName = arrSpe[2].split(':')[0]; 
      var sValue = arrSpe[2].split(':')[1]; 


      objChild2["" + sItemName + ""] = sValue; 
      objChild1["" + sTankName + ""] = objChild2; 
      objRtn["" + sLineName + ""] = objChild1; 
      //$.extend(objChild1, objChild2); 

      //objChild1 = {}; 
      //objChild2 = {}; 
     } 

     var sJsonVal = JSON.stringify(objRtn, null, 2); 

     //var sXmlVal = x2js.json2xml_str($.parseJSON(sJsonVal)); 

     objRtn = {}; 
    } 
+0

を試してみました。..

を5バージョンのECMAScriptしてください、あなたはすべてのコードを試してみましたか? – 31piy

+0

いいえ、JSONはJavaScriptとXMLの間に必要なステップではありません。 – Ryan

+0

...そのJSONに代表されるデータ構造を作成するのは良いスタートです。 – ikegami

答えて

0
{ 
    var s = "oTest^A1^BB:a1bb,oTest^A2^BB:a1cc,oTest^A1^CC:a2bb,oTest^A2^CC:a2cc"; 

    var data = {}; 
    s.split(",").forEach(function (ele) { 
     var key_val = ele.split(":"); 
     var key = key_val[0]; 
     var val = key_val[1]; 

     var sub_keys = key.split("^"); 
     var last_subkey = sub_keys.pop(); 
     var p = data; 
     sub_keys.forEach(function (subkey) { 
     if (!p[subkey]) 
      p[subkey] = {}; 

     p = p[subkey]; 
     }); 

     p[last_subkey] = val; 
    }); 

    var root_ele_name = Object.keys(data)[0]; 

    // The rest of this program assumes this program is run in a browser. 

    var doc = document.implementation.createDocument(null, root_ele_name); 

    var creator = function (creator, doc, parent, p) { 
     if (typeof(p) === 'object') { 
     for (ele_name in p) { 
      var node = doc.createElement(ele_name); 
      parent.appendChild(node); 
      creator(creator, doc, node, p[ele_name]); 
     } 
     } else { 
     var node = document.createTextNode(p); 
     parent.appendChild(node); 
     } 
    }; 

    creator(creator, doc, doc.documentElement, data[root_ele_name]); 

    var xml = new XMLSerializer().serializeToString(doc); 
    alert(xml); 
} 
+0

うわー..ありがとうたくさん!!! – EleGreen

関連する問題