使用JSON数组与JSON对象有什么区别?

时间:2012-09-05 19:56:09

标签: arrays json object

使用JSON数组有什么区别和优点:

{
   thing:[
     { },
     { }
   ]
}

与JSON对象:

{
   thing:{
     { },
     { }
   }
}

6 个答案:

答案 0 :(得分:29)

听起来不像是一个自作聪明,但是......

arrayobject之间的区别在于

使用keyvalue等设置对象

person.age = 15;

如果key值是变量,则可以像...一样访问它。

var key = "age";
alert(person[key]);

数组使用整数[1]索引并取值。

player[1].score += 1000;

[1]是的,我知道......在Javascript中,整数索引实际上变成了幕后的字符串。忽略这一点。当你想到JSON时,可以考虑数组采用整数值。

答案 1 :(得分:5)

JSON数组表示对象的集合。在JS中,有一些集合函数,例如slicepoppush。对象只有更多原始数据。

答案 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);