使用 JSON 数组有什么区别和优点:
{
thing:[
{ },
{ }
]
}
与 JSON 对象:
{
thing:{
{ },
{ }
}
}
array
an和 an的区别object
在于
key
使用 a等设置对象value
:
person.age = 15;
如果该key
值是一个变量,那么可以像这样访问它:
var key = "age";
alert(person[key]);
数组使用整数 [1] 索引并取值。
player[1].score += 1000;
[1] 是的,我知道,在 JavaScript 中,整数索引实际上在幕后变成了字符串。忽略那个。当您想到 JSON 时,尤其是采用整数值的数组。
对象-键和值,数组-整数。你什么时候用这个或那个?
我认为数组和对象分别是“是一个/一个”和“有一个”。让我们以“水果”为例。
水果数组中的每个项目都是一种水果。
array fruit : [orange, mango, banana]
. 数组可以包含对象、字符串、数字、数组,但我们只处理对象和数组。
array fruit : [orange:[], mango:{}, banana:{}]
. 你可以看到 orange 也是一个数组。这意味着任何变成橙色的项目都是橙色的一种,比如:bitter_orange、mandarin、sweet_orange。
对于水果对象,其中的任何项目都是水果的属性。因此水果有
object fruit :{seed:{}, endocarp:{},flesh:{}}
这也意味着种子对象中的任何东西都应该是种子的属性,比如:颜色,
JSON 数组表示对象的集合。在 JS 中,有一堆集合函数,例如slice
, pop
, push
. 对象只有更多的原始数据。
您显示的第二种形式实际上不是有效的 JSON,因为“事物”对象中的每个对象都需要某种排序或属性名称才能访问它。
要回答您的问题,不同之处在于,在第一种情况下,您将使用数组访问(如obj.thing[0]
or )访问“事物”中的对象obj.thing[1]
。在第二种情况下,如果您有适当的属性声明,您可以像这样访问obj.thing.property
通常在 JSON 中,数组用于存储一组相似的项目,而对象用于包含单个项目的不同属性的分组。
JSON 主要是一种允许将 javascript 对象序列化为字符串的语言。因此,在反序列化 JSON 字符串时,您应该得到一个 javascript 对象结构。如果您的 json 反序列化为一个存储 100 个名为 object1 到 object100 的对象的对象,那么这将非常不方便。大多数反序列化器都希望您拥有已知对象和已知对象数组,以便它们可以将字符串转换为您正在使用的语言中的实际对象结构。这也是面向对象设计哲学会回答你的问题。
可以使用以下方式转换 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);