【问题标题】:What's the difference between Javascript Object and JSON objectJavascript对象和JSON对象有什么区别
【发布时间】:2011-09-23 07:18:21
【问题描述】:

谁能通过例子告诉我Javascript对象和JSON对象的区别?

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    Javascript object 是 Javascript 中的一种数据类型 - 它仅在 Javascript 中才有意义。通常你会看到像这样的 Javascript 对象文字

    var obj = {
        a: 1,
        b: 2
    };
    

    JSON string 是一种数据交换格式——它只不过是一堆以特定方式格式化的字符(以便不同的程序相互通信)。因此,它可以存在于 Javascript 中,也可以存在于其他语言中,也可以简单地存储在数据库或文本文件中。

    上面的 Javascript 对象可以用 Javascript 中的 JSON 格式表示,如下所示:

    var json = '{ "a": 1, "b": 2 }';
    

    或者在 C# 中像这样:

    string json = "{ \"a\": 1, \"b\": 2 }";
    

    如您所见,JSON 只是存储在字符串中。为了使其有用,可以解析 JSON 字符串以生成任何语言的对象。因为 JSON 格式模仿了 Javascript 的对象文字语法,所以 Javascript 使解析过程变得简单:

    var obj = eval('(' + json + ')');
    

    虽然通常你会看到:

    var obj = JSON.parse(json); // for security reasons
    

    请注意,JSON 的局限性在于它不能存储函数 - 它可以包含的唯一值是:

    • 对象(文字)
    • 数组
    • 数字
    • 布尔值
    • 字符串
    • 空值

    【讨论】:

    • JSON 和 Javascript 对象的主要区别在于“JSON 字符串是一种数据交换格式”,而 Javascript 对象是 Javascript 中的一种数据类型
    【解决方案2】:

    JSON 是 javscript 对象的文本表示。它实际上是 javascript 表示法中的对象文字(因此得名 - JavaScript Object Notation => JSON)。

    如果要“比较”两个对象,请将文本转换为对象,然后比较键和值。

    对象到/从文本的一些示例:

    // Create obj using an object literal
    var obj = {key: 'value'};
    
    // Convert to text using JSON.stringify
    var text = JSON.stringify(obj);
    
    // Show the value of text
    alert( text ); // {"key":"value"}
    
    // Create a new object from text
    var newObj = JSON.parse(text); // javascript object
    
    // Show the text version of newObj
    alert(JSON.stringify(newObj));  // {"key":"value"}
    
    // Use text as code
    var newObj2 = eval('(' + text + ')');
    
    // It is indeed a string literal
    alert(JSON.stringify(newObj2));  // {"key":"value"}
    

    如果您想比较两个对象,请将它们从 JSON 转换为对象(如果它们首先是 JSON),然后执行以下操作:

    function compareObjects(a, b) {
      var i, p, aProps = [], bProps = [];
    
      // Simple test first
      if (a === b) {
        return true;
      }
    
      // Get properties of a
      for (p in a) {
        if (a.hasOwnProperty(p)) {
          aProps.push(p);
        } 
      }
    
      // Get properties of b
      for (p in b ) {
        if (b.hasOwnProperty(p)) {
          bProps.push(p);
        } 
      }
    
      // If don't have same properties, return false
      if (aProps.sort().join('') != bProps.sort().join('')) {
        return false;
      }
    
      // If property values aren't the same, return false
      i = aProps.length;
      while (i--) {
        if (a[aProps[i]] !== b[bProps[i]]) {
          return false;
        }
      }
    
      // If passed all tests, must be equal
      return true;
    }
    

    【讨论】:

    • 是的,我已经读过..我没有得到任何地方的声明示例..我想比较它们,看看有什么不同?
    • 编辑您的问题以包含它。
    • 请注意:“var obj =”不是 JSON 的一部分!从技术上讲,JSON 是纯数据的,尽管它倾向于像在内存中加载对象的代码一样执行。您只需要 {} 和中间的东西作为 JSON 数据,然后您可以“评估”并分配给 JavaScript 代码或其他编程语言中的变量。添加“var”东西会将 JSON 转换为 Javascript...
    • @Wim - 是的,好点。我使用 javascript 对象文字作为获取格式正确的 JSON 字符串的简单方法。
    【解决方案3】:

    JSON 代表“JavaScript 对象表示法”。基本上,JSON 是 Javascript,但仅限于用数据填充对象。通过执行 JSON 对象,您可以将数据“加载”到内存中。
    JavaScript 是更大的图景,有额外的代码行来操作对象或做各种其他事情。

    JSON 示例如下:

    {
        "glossary": {
            "title": "example glossary",
            "GlossDiv": {
                "title": "S",
                "GlossList": {
                    "GlossEntry": {
                        "ID": "SGML",
                        "SortAs": "SGML",
                        "GlossTerm": "Standard Generalized Markup Language",
                        "Acronym": "SGML",
                        "Abbrev": "ISO 8879:1986",
                        "GlossDef": {
                            "para": "A meta-markup language, used to create markup languages such as DocBook.",
                            "GlossSeeAlso": ["GML", "XML"]
                        },
                        "GlossSee": "markup"
                    }
                }
            }
        }
    }
    

    JavaScript 示例如下:

    var Glossary = {
        "glossary": {
            "title": "example glossary",
            "GlossDiv": {
                "title": "S",
                "GlossList": {
                    "GlossEntry": {
                        "ID": "SGML",
                        "SortAs": "SGML",
                        "GlossTerm": "Standard Generalized Markup Language",
                        "Acronym": "SGML",
                        "Abbrev": "ISO 8879:1986",
                        "GlossDef": {
                            "para": "A meta-markup language, used to create markup languages such as DocBook.",
                            "GlossSeeAlso": ["GML", "XML"]
                        },
                        "GlossSee": "markup"
                    }
                }
            }
        }
    }
    

    注意到 JavaScript 中的 var Glossary = 了吗?

    【讨论】:

      【解决方案4】:

      首先,JavaScript 就像面向对象编程中的任何其他对象一样。

      正如 RobG 所说,JSON 实际上是 Javascript Notation 中的对象文字。但不完全是。 根据一本 Javascript 书,它说这是一个使用 Object Notation 定义的对象:

      var newObject = 
      {     prop1 : true,     
      showMessage : function (msg) {alert(msg)} 
      }; 
      

      根据 JavaScript 中的 JSON,

      JSON 是 JavaScript 的对象文字符号的子集。

      你也可以考虑看看这个link

      【讨论】:

        【解决方案5】:
        var object = {
            name: "John",
            profession: "blogger"
        };
        
        alert(object.name);//John
        alert(typeof(object));//Object
        alert(object);//[object Object]
        
        
        var json = JSON.stringify(object);
        
        alert(json.name);//undefined
        alert(typeof(json));//string
        alert(json);//{"name":"John","profession":"blogger"}
        

        【讨论】:

          猜你喜欢
          • 2011-07-31
          • 2011-04-27
          • 1970-01-01
          • 2020-02-06
          • 2013-06-26
          • 1970-01-01
          相关资源
          最近更新 更多