【问题标题】:What are the differences between using JSON arrays vs JSON objects? [duplicate]使用 JSON 数组和 JSON 对象有什么区别? [复制]
【发布时间】:2012-09-05 19:56:08
【问题描述】:

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

{
   thing:[
     { },
     { }
   ]
}

与 JSON 对象:

{
   thing:{
     { },
     { }
   }
}

【问题讨论】:

  • @Martijn-Pieters 恕我直言,这个问题更多地是关于每个人的优点,即何时使用什么,所以 - 不重复
  • @Martijn_Pieters:另外,另一个问题被标记为“android”,导致一些阻抗不匹配。

标签: arrays json object


【解决方案1】:

arrayobject 之间的区别在于

使用keyvalue 设置对象,例如:

person.age = 15;

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

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

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

player[1].score += 1000;

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

【讨论】:

    【解决方案2】:

    Objects-键和值,Arrays-整数。你什么时候用这个或那个?

    我认为数组和对象分别是“is a/an”和“has a”。 让我们以“水果”为例。

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

    array fruit : [orange, mango, banana]

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

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

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

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

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

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

    【讨论】:

    • 这是一个完美的解释。
    • 很好的例子
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      一样访问

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          可以使用 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);
          

          【讨论】:

            猜你喜欢
            • 2011-04-27
            • 2011-09-23
            • 2011-07-31
            • 2014-08-12
            • 2011-03-03
            • 1970-01-01
            相关资源
            最近更新 更多