JSON.parse()是如何工作的?

8

我很少涉及JavaScript。但是,我需要解析JSON字符串。因此,我想知道JSON.parse究竟是做什么的。例如: 如果我像这样将json字符串分配给一个变量,

var ab = {"name":"abcd", "details":{"address":"pqrst", "Phone":1234567890}};

现在当我打印'ab'时,我会得到一个对象。
同样,当我执行以下操作时:
var pq = '{"name":"abcd", "details":{"address":"pqrst", "Phone":1234567890}}';
var rs = JSON.parse(pq);

“rs”是与“ab”相同的对象。那么两种方法有什么区别,JSON.parse做了什么不同的事情呢?
这可能是一个愚蠢的问题。但如果有人能解释一下,那就太好了。
谢谢。

JSON.parse 用于将字符串转换为 JSON 对象,这与 JavaScript 对象略有不同。 - Sarjan Desai
这可以帮助:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse - Vinay Pratap Singh Bhadauria
希望以下链接能对您有所帮助!点击此处查看正确答案 - Vinod Patidar
JSON.parse(ab); 可能只是一个打字错误吗?难道你不是想写 JSON.parse(pq); 吗? - Wolf
是的,谢谢你注意到了。 - rsKRISH
@SarjanDesai - 在ECMAScript中,只有一个“JSON对象”,它在ECMA-262中定义。从JSON创建的对象和从对象初始化程序创建的对象之间没有区别,因为JSON基于ECMAScript对象文字表示法。但是,JSON无法表示ECMAScript的所有数据类型或属性(例如函数),请参见JSON.org - RobG
4个回答

5

Javascript对象是Javascript中的一种数据类型 - 它具有属性和值对,就像您在第一个示例中定义的那样。

var ab = {"name":"abcd", "details":{"address":"pqrst", "Phone":1234567890}};

现在什么是Json: JSON字符串是一种数据交换格式 - 它只是一个以特定方式格式化的一堆字符(为了使不同的程序相互通信)

var pq = '{"name":"abcd", "details":{"address":"pqrst", "Phone":1234567890}}';

所以,这是一个带有JSON格式的字符串。

最后,JSON.parse()返回与给定JSON文本对应的对象。


4

以下是我对 jsfiddle 的解释。

//this is already a valid javascript object
//no need for you to use JSON.parse()
var obj1 = {"name":"abcd", "details":"1234"};
console.log(obj1);

//assume you want to pass a json* in your code with an ajax request
//you will receive a string formatted like a javascript object
var str1 = '{"name":"abcd", "details":"1234"}';
console.log(str1);

//in your code you probably want to treat it as an object
//so in order to do so you will use JSON.parse(), which will
//parse the string into a javascript object
var obj2 = JSON.parse(str1);
console.log(obj2);

JSON,即JavaScript对象表示法,是一种用于构建数据结构的最小化、易读的格式。它主要用于在服务器和Web应用程序之间传输数据,作为XML的替代方案。


@Wolf 谢谢您的注意。已更新答案和 jsfiddle。 - Sotiris Kiritsis

1
您的 'ab' 变量不是一个字符串,它是一个合适的 JavaScript 对象,因为您在它周围使用了 {}。如果您将整个内容用 "" 包含起来,那么它将成为一个字符串,并打印为单行。

1
数据类型!!那就是答案。 在这种情况下,ab 是一个对象pq是一个字符串(含糊地说)。 Print只是一种将“任何东西”显示为字符串的操作。但是,您必须以不同的方式看待这两个对象。 字符串本身是一个对象,它具有与之相关联的属性和方法。在这种情况下,pq就像一个对象,它具有一个值:{"name":"abcd", "details":{"address":"pqrst", "Phone":1234567890}},例如,它具有一个名为length的属性,其值为66。 但是ab是一个对象,您可以将namedetails视为其属性。
JSON.parse()所做的不同之处在于,它解析(转换)该字符串为一个对象。并非所有字符串都可以解析为对象。尝试传递{"name":"abc",JSON.parse将抛出异常。
在解析之前,pq 没有任何 name 属性。如果你像这样做 pq.name,它会返回 undefined。但是当你使用 JSON.parse() 解析它时,rs.name 将返回字符串 "abcd"。但是 rs 不再具有属性 length,因为它不是一个字符串。如果你尝试 rs.length,那么你将得到一个值为 undefined。

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