使用JSON数组有什么区别和优点:
{
thing:[
{ },
{ }
]
}
与JSON对象:
{
thing:{
{ },
{ }
}
}
答案 0 :(得分:29)
听起来不像是一个自作聪明,但是......
array
和object
之间的区别在于
使用key
和value
等设置对象
person.age = 15;
如果key
值是变量,则可以像...一样访问它。
var key = "age";
alert(person[key]);
数组使用整数[1]索引并取值。
player[1].score += 1000;
[1]是的,我知道......在Javascript中,整数索引实际上变成了幕后的字符串。忽略这一点。当你想到JSON时,可以考虑数组采用整数值。
答案 1 :(得分:5)
JSON数组表示对象的集合。在JS中,有一些集合函数,例如slice
,pop
,push
。对象只有更多原始数据。
答案 2 :(得分:5)
对象 - 键和值,数组 - 整数。你什么时候使用这个或那个?
我认为数组和对象分别是“a / an”和“has a”。 让我们以“水果”为例。
水果阵列中的每个项目都是一种水果。
array fruit : [orange, mango, banana]
。 数组可以包含对象,字符串,数字,数组,但只允许处理对象和数组。
array fruit : [orange:[], mango:{}, banana:{}]
。 你可以看到橙色也是一个数组。它暗示任何转换为橙色的项目都是橙色,例如:bitter_orange,mandarin,sweet_orange。
对于水果对象,其中的任何项目都是水果的属性。因此水果有一个
object fruit :{seed:{}, endocarp:{},flesh:{}}
这也意味着种子对象中的任何东西都应该是种子的属性,比如:color,
答案 3 :(得分:4)
您显示的第二个表单实际上是无效的JSON,因为“thing”对象中的每个对象都需要某种排序或属性名来访问它。
要回答您的问题,不同之处在于,在第一种情况下,您可以使用obj.thing[0]
或obj.thing[1]
等数组访问来访问“thing”中的对象。在第二种情况下,如果您有适当的属性声明,则可以访问obj.thing.property
通常,JSON数组用于存储类似项的分组,而对象用于包含单个项的不同属性的分组。
答案 4 :(得分:1)
JSON主要是一种允许将javascript对象序列化为字符串的语言。因此,在反序列化JSON字符串时,您应该获得一个javascript对象结构。如果你的json反序列化为一个对象,它存储了100个对象,称为object1到object100,那么这将非常不方便。 大多数反序列化器都希望您拥有已知对象和已知对象数组,以便它们可以将字符串转换为您正在使用的语言的实际对象结构。 这也是一个问题,面向对象设计的哲学会回答你。
答案 5 :(得分:1)
可以使用toJSON
转换JSON对象:
function kryptonite(key)
{
var replacement = {};
for(var __ in this)
{
if(__ in alias)
replacement[__] = this[__]
}
return replacement;
}
var alias = {"Clark":"","phone":""};
var contact = {
"Clark":"Kent",
"Kal El":"Superman",
"phone":"555-7777"
}
contact.toJSON = kryptonite;
var foo = JSON.stringify(contact)
可以使用map
转换JSON数组:
var contact = {
"Clark":"Kent",
"Kal El":"Superman",
"phone":"555-7777",
"home":[{"present":"Metropolis"},{"past":"Krypton"},{"future":"Phantom Zone"}]
}
var filter = {"past":"","future":""}
function junction(value, index)
{
for (var __ in filter) if(value[__]) return value[__]
}
var island = contact.home.map(junction);