JSON 给出的长度值不正确

JSON Length giving the incorrect value

我想获取 JSON 的长度,但它没有给出我想要的值。我正在使用 XML 到 JSON 转换器库 (xml2js)。如果你知道除 xml2js 之外的另一个库。我也可以用。

console.log(result.length) -> Returns the 2, which is correct.

   {
  LISTENER: [
    {
      CONNECTTIME: { _text: '4880' },
      UID: { _text: '57' },
      XFF: {},
      GRID: { _text: '57' },
      TRIGGERS: { _text: '0' }
    },
    {
      CONNECTTIME: { _text: '254' },
      UID: { _text: '65' },
      XFF: {},
      GRID: { _text: '65' },
      TRIGGERS: { _text: '0' }
    }
  ]
}

但是如果我从 JSON 中删除一条记录,如下所示。

console.log(result.length) -> Returns the 9, which is wrong. I want it to be 1. Where am i doing wrong?

{
    LISTENER: {
        CONNECTTIME: { _text: '4587' },
        UID: { _text: '57' },
        XFF: {},
        GRID: { _text: '57' },
        TRIGGERS: { _text: '0' }
    }
}

有人可以帮助我吗?是否有任何强制选项使两条记录都转换为数组。


其他帮助信息;


这是代码。

var options = {ignoreComment: true, alwaysChildren: true, compact: true}
var result = convert.xml2js(response.data, options);
            
console.log("listeners.listener:"+Object.keys(result.SHOUTCASTSERVER.LISTENERS.LISTENER).length);
console.log(util.inspect(result.SHOUTCASTSERVER.LISTENERS, false, null, true /* enable colors */))

response.data 是从网站获取请求(使用 axios 库)的响应。给出 XML 页面的正文。

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<SHOUTCASTSERVER>
<LISTENERS>
<LISTENER>
<CONNECTTIME>350</CONNECTTIME>
<UID>66</UID>
<XFF/>
<GRID>66</GRID>
<TRIGGERS>0</TRIGGERS>
</LISTENER>
</LISTENERS>
</SHOUTCASTSERVER>

XML 使用库转换页面 (XMLtoJS) 结果输出(如果有1条记录这样转换);

{
  _declaration: {
    _attributes: { version: '1.0', encoding: 'UTF-8', standalone: 'yes' }
  },
  SHOUTCASTSERVER: {
    LISTENERS: {
      LISTENER: {
        CONNECTTIME: { _text: '657' },
        UID: { _text: '66' },
        XFF: {},
        GRID: { _text: '66' },
        TRIGGERS: { _text: '0' }
      }
    }
  }
}

结果输出(2条记录输出);

{
  _declaration: {
    _attributes: { version: '1.0', encoding: 'UTF-8', standalone: 'yes' }
  },
  SHOUTCASTSERVER: {
    LISTENERS: {
      LISTENER: [
        {
          CONNECTTIME: { _text: '819' },
          UID: { _text: '66' },
          XFF: {},
          GRID: { _text: '66' },
          TRIGGERS: { _text: '0' }
        },
        {
          CONNECTTIME: { _text: '3' },
          UID: { _text: '68' },
          XFF: {},
          GRID: { _text: '68' },
          TRIGGERS: { _text: '0' }
        }
      ]
    }
  }
}

你应该在 XML 中尝试一些类型定义,否则当你将 xml 转换为 js 时会发生这种情况。如果 XML 节点只有一个 child,解析器会自动将其转换为 object.

我发现了问题。如果有 1 条记录,XMLtoJSON 库将转换为对象。但如果有 2 条或更多条记录,它会转换为数组。

因此,为了解决这个问题,我们应该在选项中添加 alwaysArray: true 属性。