2011-06-27 82 views

回答

50

A Javascript 對象是Javascript中的數據類型 - 它只有在Javascript中才有意義。通常你看到一個Javascript 對象字面這樣的:

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

一個JSON 是一種數據交換格式 - 它無非是一串字符格式的一種特殊的方式(爲了不同的程序彼此溝通)。正因爲如此,它可以存在於JavaScript內部,或者以其他語言存在,或者存儲在數據庫或文本文件中。

以上的JavaScript對象可以在JSON格式表示在Javascript中是這樣的:

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是有限的,它不能存儲功能 - 它可以包含的唯一值是:

  • 物體(文字)
  • 陣列
  • 數字
  • 布爾
+3

JSON和Javascript對象之間的主要區別是「JSON字符串是數據交換格式」,而Javascript對象是Javascript中的數據類型 – neelmeg

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

如果要比較兩個對象,從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; 
} 
+0

是的,我已經閱讀that..i沒有得到雙方anywhere..i聲明例如要對它們進行比較,看看有什麼不同? – Refti

+2

編輯您的問題以包含該問題。 – RobG

+1

請注意:「var obj =」不是JSON的一部分!從技術上講,JSON只是數據,儘管它傾向於被執行,就好像它是在內存中加載對象的代碼一樣。您只需將{}和其​​中的內容作爲JSON數據,然後您就可以'評估'並將其分配給JavaScript代碼或其他編程語言中的變量。添加「變種」的東西變成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" 
       } 
      } 
     } 
    } 
} 

通知的VAR詞彙=在JavaScript?

0

那麼首先,JavaScript就像面向對象編程中的任何其他對象一樣。

而RobG表示JSON實際上是Javascript符號中的對象字面值。但不完全。 根據一個Javascript的書,它說這是通過使用對象符號定義的對象:

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

根據JSON在JavaScript中,

JSON是JavaScript的對象文字符號的子集。

你也可能要考慮考慮看看這個link

0
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"} 
相關問題