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

Ref*_*fti 34 javascript json

有人能用一个例子告诉我Javascript对象和JSON对象之间的区别吗?

Dav*_*ang 54

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

var obj = {
    a: 1,
    b: 2
};
Run Code Online (Sandbox Code Playgroud)

JSON 字符串是一种数据交换格式 - 它只不过是以特定方式格式化的一堆字符(为了让不同的程序相互通信).因此,它可以存在于Javascript中,也可以存在于其他语言中,或者只是存储在数据库或文本文件中.

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

var json = '{ "a": 1, "b": 2 }';
Run Code Online (Sandbox Code Playgroud)

或者像C#这样:

string json = "{ \"a\": 1, \"b\": 2 }";
Run Code Online (Sandbox Code Playgroud)

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

var obj = eval('(' + json + ')');
Run Code Online (Sandbox Code Playgroud)

虽然通常你会看到:

var obj = JSON.parse(json); // for security reasons
Run Code Online (Sandbox Code Playgroud)

请注意,JSON的限制在于它无法存储函数 - 它可以包含的唯一值是:

  • 对象(文字)
  • 阵列
  • 数字
  • 布尔
  • 字符串

  • JSON和Javascript对象之间的关键区别是"JSON字符串是数据交换格式",Javascript对象是Javascript中的数据类型 (3认同)

Rob*_*obG 14

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"}
Run Code Online (Sandbox Code Playgroud)

如果你想比较两个对象,将它们从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;
}
Run Code Online (Sandbox Code Playgroud)

  • 编辑您的问题以包含该问题. (2认同)