【问题标题】:E4X to JSON conversion fails for duplicate xml elements重复 xml 元素的 E4X 到 JSON 转换失败
【发布时间】:2015-09-11 15:02:49
【问题描述】:

请参阅下面我用来将 Mirth xml 转换为 JSON 的代码。

function E4XtoJSON(xml, ignored) {
  var r, children = xml.*, attributes = xml.@*, length = children.length();
  if(length == 0) {
    r = xml.toString();
  } else if(length == 1) {
    var text = xml.text().toString();
    if(text) {
      r = text;
    }
  }
  if(r == undefined) { 
    r = {};
    for each (var child in children) {
     var name = child.localName();
     var json = E4XtoJSON(child, ignored);
     var value = r[name];
     if(value) {
       if(value.length) {
         value.push(json);
       } else {
         r[name] = [value, json]
       }
     } else {
       r[name] = json;
     }
    }
  }
  if(attributes.length()) {
    var a = {}, c = 0;
    for each (var attribute in attributes) {
      var name = attribute.localName();
      if(ignored && ignored.indexOf(name) == -1) {
        a["_" + name] = attribute.toString();
        c ++;
      }
    }
    if(c) {
      if(r) a._ = r;
      return a;
    }
  }

  return r;
}

我担心的是

<AdditionalMessageInformationCount AdditionalMessageInformationCount="02"><AdditionalMessageInformationQualifier>01</AdditionalMessageInformationQualifier><AdditionalMessageInformation>MEMBER MUST USE MAIL ORDER.</AdditionalMessageInformation><AdditionalMessageInformationQualifier>02</AdditionalMessageInformationQualifier><AdditionalMessageInformation>PLAN LIMITATIONS EXCEEDED</AdditionalMessageInformation></AdditionalMessageInformationCount>

这里 AdditionalMessageInformation 元素被使用了两次,因此函数无法创建 JSON。 如果有人使用 javascript 代码而不是任何 API 将 XML 转换为 json 格式,请提供帮助

【问题讨论】:

    标签: mirth


    【解决方案1】:

    我们在这个版本上取得了成功:

    function E4XtoJSON(xml, ignored){
    var r, children = xml.*,
        attributes = xml.@ * ,
        length = children.length();
    if (length == 0)
    {
        r = xml.toString();
    }
    else if (length == 1)
    {
        var text = xml.text().toString();
        if (text)
        {
            r = text;
        }
    }
    if (r == undefined)
    {
        r = {};
        for each(var child in children)
        {
            var name = child.localName();
            var json = E4XtoJSON(child, ignored);
            var value = r[name];
            if (value)
            {
                if (value instanceof Array)
                {
                    value.push(json);
                }
                else
                {
                    r[name] = [value, json]
                }
            }
            else
            {
                r[name] = json;
            }
        }
    }
    if (attributes.length())
    {
        var a = {},
            c = 0;
        for each(var attribute in attributes)
        {
            var name = attribute.localName();
            if (ignored && ignored.indexOf(name) == -1)
            {
                a["_" + name] = attribute.toString();
                c++;
            }
        }
        if (c)
        {
            if (r) a._ = r;
            return a;
        }
    }
    return r;
    

    }

    【讨论】:

      【解决方案2】:

      随着 Mirth Connect 3.3.0 版的发布,您可以使用 Mirth Connect 将频道的内部数据类型设置为 JSON。这一切都会为您完成。

      【讨论】:

      • 它不会为您执行此操作。这仅在入站数据已经是 JSON 时使用。它不会为您从 xml 转换为 json。
      猜你喜欢
      • 2011-07-17
      • 2012-08-12
      • 2019-05-17
      • 2014-10-25
      • 2012-09-07
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多