json字符串與JSON對象

ajax中,我們自己拼接的是一個JSON對象,以爲它是無數據類型的,所以js根據其格式默認其實對象,

你要是往後臺發,要先把它裝換成JSON字符。


從ajax的服務器發過的,一定是字符串,你想要把它解析,很簡單,把它先變成JSON對象才行。



數據傳輸過程中,json是以文本,即字符串的形式傳遞的,而JS操作的是JSON對象,所以,JSON對象和JSON字符串之間的相互轉換是關鍵。例如:
JSON字符串:
var str1 = '{ "name": "cxh", "sex": "man" }'; 
JSON對象:
var str2 = { "name": "cxh", "sex": "man" };


一、JSON字符串轉換爲JSON對象

要使用上面的str1,必須使用下面的方法先轉化爲JSON對象:

//由JSON字符串轉換爲JSON對象

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

或者

var obj = str.parseJSON(); //由JSON字符串轉換爲JSON對象

或者

var obj = JSON.parse(str); //由JSON字符串轉換爲JSON對象

然後,就可以這樣讀取:

Alert(obj.name);

Alert(obj.sex);

特別注意:如果obj本來就是一個JSON對象,那麼使用eval()函數轉換後(哪怕是多次轉換)還是JSON對象,但是使用parseJSON()函數處理後會有問題(拋出語法異常)。


從後臺傳入到前臺的是json字符串,不是真正的json對象,因此需要使用eval函數轉換。



二、可以使用toJSONString()或者全局方法JSON.stringify()將JSON對象轉化爲JSON字符串。

例如:

var last=obj.toJSONString(); //將JSON對象轉化爲JSON字符

或者

var last=JSON.stringify(obj); //將JSON對象轉化爲JSON字符

alert(last);


注意:
上 面的幾個方法中,除了eval()函數是js自帶的之外,其他的幾個方法都來自json.js包。新版本的 JSON 修改了 API,將 JSON.stringify() 和 JSON.parse() 兩個方法都注入到了 JavaScript 的內建對象裏面,前者變成了 Object.toJSONString(),而後者變成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()方法,則說明您的json包版本太低。




JSONJavaScript中對象的字面量,是對象的表示方法,通過使用JSON,可以減少中間變量,使代碼的結構更加清晰,也更加直觀。使用JSON,可以動態的構建對象,而不必通過類來進行實例化,大大的提高了編碼的效率。




JSON建構於兩種結構:

  • “名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解爲對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分語言中,它被理解爲數組(array)。

這些都是常見的數據結構。事實上大部分現代計算機語言都以某種形式支持它們。這使得一種數據格式在同樣基於這些結構的編程語言之間交換成爲可能。

JSON具有以下這些形式:

對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”後跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。

數組是值(value)的有序集合。一個數組以“[”(左中括號)開始,“]”(右中括號)結束。值之間使用“,”(逗號)分隔。

值(value)可以是雙引號括起來的字符串(string)、數值(number)、truefalse、 null、對象(object)或者數組(array)。這些結構可以嵌套。

字符串(string)是由雙引號包圍的任意數量Unicode字符的集合,使用反斜線轉義。一個字符(character)即一個單獨的字符串(character string)。

字符串(string)與C或者Java的字符串非常相似。

數值(number)也與C或者Java的數值非常相似。除去未曾使用的八進制與十六進制格式。除去一些編碼細節。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章