Javascript 对象和 JSON 对象有什么区别

IT技术 javascript json
2021-02-02 17:18:52

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

5个回答

Javascript对象Javascript中的一种数据类型 - 只有在 Javascript 中才有意义。通常你会看到这样的 Javascript对象字面量

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

JSON字符串是一种数据交换格式——它只不过是一组以特定方式格式化的字符(以便不同的程序相互通信)。因此,它可以存在于 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 中的一种数据类型
2021-03-24 17:18:52

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;
}
是的,我读过……我在任何地方都没有得到两者的声明示例……我想比较它们,看看有什么不同?
2021-03-15 17:18:52
请注意:“var obj =" 不是 JSON 的一部分!从技术上讲,JSON 是纯数据的,尽管它倾向于像在内存中加载对象的代码一样执行。您只需要 {} 和中间的东西作为 JSON 数据,然后您可以“评估”并将其分配给 JavaScript 代码或其他编程语言中的变量。添加“var”的东西把 JSON 变成了 Javascript ......
2021-03-18 17:18:52
编辑您的问题以包含该问题。
2021-04-05 17:18:52
@Wim - 是的,很好。我使用 javascript 对象文字作为获取格式正确的 JSON 字符串的简单方法。
2021-04-06 17:18:52

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 =了吗?

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

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

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

根据 JavaScript 中的 JSON,

JSON 是 JavaScript 的对象字面量表示法的一个子集。

你也可以考虑看看这个链接

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