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
属性。
我想获取 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
属性。