58

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

{
   thing:[
     { },
     { }
   ]
}

与 JSON 对象:

{
   thing:{
     { },
     { }
   }
}
4

6 回答 6

44

arrayan和 an的区别object在于

key使用 a等设置对象value

person.age = 15;

如果该key值是一个变量,那么可以像这样访问它:

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

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

player[1].score += 1000;

[1] 是的,我知道,在 JavaScript 中,整数索引实际上在幕后变成了字符串。忽略那个。当您想到 JSON 时,尤其是采用整数值的数组。

于 2012-09-05T20:00:21.403 回答
12

对象-键和值,数组-整数。你什么时候用这个或那个?

我认为数组和对象分别是“是一个/一个”和“有一个”。让我们以“水果”为例。

水果数组中的每个项目都是一种水果。

array fruit : [orange, mango, banana]

. 数组可以包含对象、字符串、数字、数组,但我们只处理对象和数组。

array fruit : [orange:[], mango:{}, banana:{}]

. 你可以看到 orange 也是一个数组。这意味着任何变成橙色的项目都是橙色的一种,比如:bitter_orange、mandarin、sweet_orange。

对于水果对象,其中的任何项目都是水果的属性。因此水果有

object fruit :{seed:{}, endocarp:{},flesh:{}}

这也意味着种子对象中的任何东西都应该是种子的属性,比如:颜色,

于 2015-12-24T14:23:46.043 回答
8

JSON 数组表示对象的集合。在 JS 中,有一堆集合函数,例如slice, pop, push. 对象只有更多的原始数据。

于 2012-09-05T19:58:43.587 回答
5

您显示的第二种形式实际上不是有效的 JSON,因为“事物”对象中的每个对象都需要某种排序或属性名称才能访问它。

要回答您的问题,不同之处在于,在第一种情况下,您将使用数组访问(如obj.thing[0]or )访问“事物”中的对象obj.thing[1]。在第二种情况下,如果您有适当的属性声明,您可以像这样访问obj.thing.property

通常在 JSON 中,数组用于存储一组相似的项目,而对象用于包含单个项目的不同属性的分组。

于 2012-09-05T20:00:47.680 回答
2

JSON 主要是一种允许将 javascript 对象序列化为字符串的语言。因此,在反序列化 JSON 字符串时,您应该得到一个 javascript 对象结构。如果您的 json 反序列化为一个存储 100 个名为 object1 到 object100 的对象的对象,那么这将非常不方便。大多数反序列化器都希望您拥有已知对象和已知对象数组,以便它们可以将字符串转换为您正在使用的语言中的实际对象结构。这也是面向对象设计哲学会回答你的问题。

于 2012-09-05T20:02:05.313 回答
1

可以使用以下方式转换 JSON 对象toJSON

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)

可以使用以下方式转换 JSON 数组map

 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);
于 2014-05-02T21:31:41.257 回答