【问题标题】:How do I convert this string to JSON? (using javascript object)(string->JSON->XML) [closed]如何将此字符串转换为 JSON? (使用javascript对象)(字符串-> JSON-> XML)[关闭]
【发布时间】:2017-12-19 05:40:53
【问题描述】:

我想将此字符串转换为 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"
    }
  }
}

最后我想要

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

此 XML 格式字符串。

(是否可以直接转成XML而不转成JSON?)

我试图将我的字符串放入“对象”中,但未能获得重复值。

请 ECMAscript 5 版本..

我试过了

   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 = {};
    }

【问题讨论】:

  • 您尝试过任何代码吗?
  • 不,JSON 不是 JavaScript 和 XML 之间的必要步骤。
  • ...但是创建由该 JSON 表示的数据结构将是一个好的开始。
  • 那些L1应该是oTest吗?
  • @31piy 是的。我试着把这个“字符串”放到“对象”上。但是 'objA["oTest"]["A1"]["BB"]' 的值和 'objA["oTest"]["A2"]["BB"]' 的值相等。其实我知道你我的朋友告诉我你很有帮助..如果我的问题缺乏,我很抱歉。

标签: javascript json xml


【解决方案1】:
{
   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);
}

【讨论】:

  • 哇.. 非常感谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多