【问题标题】:How does JSON.parse() work?JSON.parse() 是如何工作的?
【发布时间】:2015-12-19 01:09:42
【问题描述】:

我没有在 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 有什么不同呢?

这可能是一个愚蠢的问题。但如果有人能解释这一点,那将会很有帮助。

谢谢。

【问题讨论】:

标签: javascript json javascript-objects


【解决方案1】:

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文本对应的Object。

【讨论】:

    【解决方案2】:

    这是我对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 Object Notation 是一种用于结构化数据的最小且可读的格式。它主要用于在服务器和 Web 应用程序之间传输数据,作为 XML 的替代方案。

    【讨论】:

    • @Wolf 感谢您的关注。更新了答案和 jsfiddle。
    【解决方案3】:

    您的“ab”变量不是字符串,而是正确的 javascript 对象,因为您在它周围使用了 {}。如果您将整个内容包含在 "" 中,那么它将是一个字符串并打印为一行。

    【讨论】:

      【解决方案4】:

      数据类型!!这就是答案。 在这种情况下,ab 是一个 objectpq 是一个字符串(模糊地说)。 打印 只是一个将“任何东西”显示为字符串的操作。但是,您必须以不同的方式看待两者。 String 本身是一个对象,它具有与之关联的属性和方法。在这种情况下,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 的值。

      【讨论】:

        猜你喜欢
        • 2015-07-23
        • 1970-01-01
        • 2016-04-26
        • 1970-01-01
        • 2015-09-01
        • 2020-11-15
        • 2020-06-19
        • 1970-01-01
        相关资源
        最近更新 更多