2012-10-06 109 views
18

尽管有大量的谷歌搜索和头发拉动,但我不能为我的生活阐述json,对象和数组之间的差异(在javascript中)。下面是我如何使用二维数据容器(害怕在这里使用“数组”,“对象”或“json”)。请告诉我这两个例子是什么?javascript对象vs数组vs vs 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"} 
    ] 
} 
+0

JSON是按照符合JSON规范要求的字符序列布置的UTF-8编码文本数据。它的创建方式没有区别。重要的是你最终得到UTF-8数据。 –

+0

@ user1689607 Nit:[JSON](http://www.json.org/)不*指定UTF编码(但它确实需要Unicode) - UTF-X就是Unicode如何映射到八位位组,并且此编码独立于JSON发生。否则,是的:JSON是*序列化*格式。 – 2012-10-06 22:22:39

+0

* default *编码:-)但是,服务器可以自由发送JSON作为UTF-16(或甚至UCS-2 ..也许?)以及适当的协商/头文件。 – 2012-10-06 22:28:32

回答

49

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"} 
    ] 
} 

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

+0

谢谢,加里。这是迄今为止我所遇到的最清晰的解释。欣赏它。 – Octavient

0

嗯,我相信对象可以有方法和属性,而阵列不能。 JSON可以传递给服务器,而阵列是不能忽视的,除非你把它作为由POST

+0

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

5

字符串可以使用{括号}申报对象字面

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

对象是键名称值对的集合。

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

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

下面是一个简单对象,它表示一个人的例子:

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

JSONJavaScript Object Notation。这只是写下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}} 
1

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

数组是特殊的对象。它们可以由[]构建。

对象可以通过{}构建。

所以你在你的例子中有两个JSON字符串,一个代表一个对象数组,第二个代表一个对象,它的属性本身就是对象数组。