微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JSON 长度给出不正确的值

如何解决JSON 长度给出不正确的值

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

console.log(result.length) -> 返回 2,这是正确的。

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

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

console.log(result.length) -> 返回 9,这是错误的。我希望它是 1。我哪里做错了?

{
    LISTENER: {
        CONNECTTIME: { _text: '4587' },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' },GRID: { _text: '66' },TRIGGERS: { _text: '0' }
      }
    }
  }
}

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

{
  _declaration: {
    _attributes: { version: '1.0',SHOUTCASTSERVER: {
    LISTENERS: {
      LISTENER: [
        {
          CONNECTTIME: { _text: '819' },TRIGGERS: { _text: '0' }
        },{
          CONNECTTIME: { _text: '3' },UID: { _text: '68' },GRID: { _text: '68' },TRIGGERS: { _text: '0' }
        }
      ]
    }
  }
}

解决方法

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

,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。