JavaScript对象 vs 数组 vs JSON

23

尽管我做了很多搜索并且用力思考,但我仍然无法清楚地表达json、对象和数组(在javascript中)之间的区别。下面是我一直在使用的二维数据容器(不敢在这里使用“数组”、“对象”或“json”这些词)。请告诉我这两个示例是什么?

//first example:
[
    {"record_id":1,"name":"Frank"},
    {"record_id":2,"name":"Sally"}
]

//second example:
{
"countries": 
    [
    {"id":1,"name":"Canada"},
    {"id":2,"name":"Mexico"}
    ],
"states":
    [
    "id":1,"name":"Maine"},
    {"id":2,"name":"Alaska"}
    ]
}

JSON是UTF-8编码的文本数据,按照JSON规范的要求排列成一系列字符。它的创建方式并不重要,重要的是最终得到UTF-8数据。 - I Hate Lazy
@user1689607 注意:JSON 并没有 指定UTF编码(但它确实强制使用Unicode)- UTF-X只是Unicode映射到八位字节的方式,而这种编码与JSON无关。否则,没错:JSON是一种序列化格式。 - user166390
默认编码是 :-) 但是,服务器可以通过适当的协商/标头自由地将JSON作为UTF-16(甚至UCS-2..也许?)发送回来。 - user166390
@pst:是的,我对编码过于具体了。主要问题在于,无论语法如何,它都是文本数据。我认为人们会混淆语法和数据。但是你说得很好。 :) - I Hate Lazy
5个回答

63

JSON是数据结构的一种表示方式,它不是一个对象或者一个数组。

[1,2,3]

是一个数组。

{"foo":"bar"}

是一个对象。

在你的示例中,

[
  {"record_id":1,"name":"Frank"},
  {"record_id":2,"name":"Sally"}
]

是一个对象数组。

{
  "countries": 
    [
      {"id":1,"name":"Canada"},
      {"id":2,"name":"Mexico"}
    ],
  "states":
    [
      {"id":1,"name":"Maine"},
      {"id":2,"name":"Alaska"}
    ]
}

这是一个包含其他数组和对象的对象。


谢谢,Gary。这是我迄今为止遇到的最清晰的解释。非常感谢。 - Octavient

10

JSONJavaScript对象表示法的缩写,它是一种用于书写JavaScript数据类型的方法,并不是一种数据类型本身。

以下是一些JavaScript数据类型和创建它们的文字字面量示例。

JSON可以用于从服务器向浏览器发送数据,因为它易于被JavaScript解析成普通的JavaScript数据结构。

在您的示例中,您正在使用对象列表和对象的对象。

这是一个包含3个空对象的列表。

[{}, {}, {}]

这是三个简单记录的列表:

var mylist = [
    {name: 'John', age: 24},
    {name: 'Bill', age: 42},
    {name: 'Jill', age: 18},
    ]

您可以像这样访问它:

mylist[1].name
>>> 'Bill'

mylist[2].age
>>> 18

JavaScript有几种数据类型:

数字类型

1
100
-2000
123.45

字符串

"Hi John"
"Message:\nGo Forth"

布尔型

true
false

数组

[1,2,3]
[]
["a", "b", 123]
["a", "b", 123, [3,4,5]]

对象

{}
{a: 10}
{mylist: [1,2,3], yourlist: [4,5,6]}
{myself: {name: 'me', age: 10}, yourself: {name: 'you', age: 20}}

6

您可以使用 { 大括号 } 来声明一个对象字面量

您可以使用 [ 方括号 ] 来声明一个数组字面量

对象是键名值对的集合。

以下是一个字符串数组的示例:

var a = [ "one", "two", "three" ];

这是一个代表人的简单对象示例:

var personObject = {
    name: 'Joe',
    age: 25,
    hometown: 'New York'        
};

1

JSON是一种文本数据交换格式。正如其名称(“JavaScript对象表示法”)所示,它起源于JS;这意味着JSON实际上是语法上有效的JavaScript。换句话说,您可以直接将JSON字符串粘贴到JS代码中。

数组是特殊的对象。它们可以通过[]构造。

对象可以通过{}构造。

因此,在您的示例中,您有两个JSON字符串,一个表示对象数组,第二个表示属性本身是对象数组的对象。


0

我相信对象可以有方法和属性,而数组则不行。JSON 可以通过 POST 作为字符串传递到服务器,而数组则不能。


这个答案可能会让人感到困惑。JSON可以编码数组,这些数组可以传递给服务器,就像JSON可以编码对象一样,这些对象也可以传递给服务器。此外,JSON对象不能有方法,因为JSON不是脚本语言或编程语言(它是一种数据交换格式)。 - CristosLC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接