【发布时间】:2012-11-11 00:17:46
【问题描述】:
我使用$.ajax() 和dataType: "xml" 从GMail API 接收数据,然后将其扔到$.xml2json,即jQuery plugin。问题是(正如页面上的演示具有讽刺意味的那样)当我输入这样的内容时:
<animals>
<dog>
<name>Rufus</name>
<breed>labrador</breed>
</dog>
<dog>
<name>Marty</name>
<breed>whippet</breed>
</dog>
<cat name="Matilda"/>
</animals>
我明白了:
{
animals: {
dog: [
{
name: 'Rufus',
breed: 'labrador'
}, {
name: 'Marty',
breed: 'whippet'
}
],
cat: {
name: 'Matilda'
}
}
}
无论如何,如您所见,<animals> 中有两个<dog>s,只有一个<cat>;因此,animals["cat"] 是一个对象,而animals["dog"] 是一个对象数组。同样,当 GMail 只返回一个 <entry> 时,feed["entry"] 是其中包含的内容的数组,但是当有多个标签时,feed["entry"] 是一个条目数组,而这些条目又是里面有什么。
我想做的是使用条件语句做不同的事情,具体取决于我是否有 1 个或多个条目;为此,我需要一个布尔值,它告诉我有多少条目。我该怎么做呢?欢迎使用 JQuery。
编辑:我想另一个可能的答案是编辑插件本身的源代码并使其提供某种方式来知道它是一个单独的标签(一个类似数组的对象)还是有很多标签(一个“真正的”数组)。
【问题讨论】:
-
要清楚,
[]是一个数组,{}是一个对象。如果您相应地更改措辞,您的问题会更清楚。此外,布尔值是一个真/假值 - 您不会将它用于项目计数。 -
animals["dog"]实际上是一个对象的数组。/NITPICK -
@glortho 我猜。此外,(非常烦人)在他们两个上调用
typeof似乎返回“对象”。有没有其他方法可以区分这两者? -
@glortho - 从技术上讲,
if()中的任何内容都是布尔值;这就是我的意思:D -
Object.prototype.toString.call( [] )与Object.prototype.toString.call( {} )
标签: javascript jquery html xml json