文章出處

JSON


在使用名稱/值對或XML時,實際上是使用javascript從應用程序中取得數據并將數據轉換成另一種數據格式。javascript不僅作為格式化語言使用,還可以使用javascript語言中的對象來表示數據。

將javascript對象轉換成可以隨請求發送的數據(同步異步都可以)。

簡單的說,JSON可以將javascript對象中表示的一組數據轉換為字符串,然后就可以在函數之間輕松的傳遞這個字符串,或者在異步應用程序中將字符串從web客戶機傳遞給服務器端程序。

JSON可以表示數組和復雜的對象,而不僅僅是鍵和值得簡單列表。


JSON表示名稱/值對:

{"name1":"rose1","name2":"rose2","name3":"rose3"}

多個鍵/值逗號分開。


值的數組

表示一組值時,將多個帶花括號的記錄分組在一起。

{
  "people":[
 {"name":"rose1","age":"18","email":"1554@555.com"},
  {"name":"rose2","age":"28","email":"15dd4@555.com"},
   {"name":"rose3","age":"38","email":"5554@555.com"}
  ]
}

只有people是變量,值是包含三個條目的數組,每個條目是一個人的記錄,其中包含名字,年齡和電子郵件。上面演示如果用括號將記錄組合成一個值,當然也可以使用相同的語法表示多個值(每個值包含多個記錄)

{
  "authors":[
 {"name":"rose1","age":"18","email":"1554@555.com"},
  {"name":"rose2","age":"28","email":"15dd4@555.com"},
   {"name":"rose3","age":"38","email":"5554@555.com"}
  ],
    "musicians":[
 {"name":"rose1","age":"18","email":"1554@555.com"},
  {"name":"rose2","age":"28","email":"15dd4@555.com"},
   {"name":"rose3","age":"38","email":"5554@555.com"}
  ]
}

注意了 在不同的條目authors,musicians之間,里面的名稱/值可以不一樣的。在處理JSON格式的數據時,沒有需要遵守的預定義的約束。所以,在同樣的數據結構中,可以用不同的數據表示方式,甚至可以以不同的方式來表示同一事物。


在javascript中使用JSON

JSON是javascript原生格式,這意味著在javascript中處理JSON數據不需要任何特殊的API或工具包。

將JSON數據賦值給變量:

可以將JSON格式的數據字符串直接賦值給javascript變量。

 var people=
{
  "authors":[
 {"name":"rose1","age":"18","email":"1554@555.com"},
  {"name":"rose2","age":"28","email":"15dd4@555.com"},
   {"name":"rose3","age":"38","email":"5554@555.com"}
  ],
    "musicians":[
 {"name":"rose1","age":"18","email":"1554@555.com"},
  {"name":"rose2","age":"28","email":"15dd4@555.com"},
   {"name":"rose3","age":"38","email":"5554@555.com"}
  ]
}

訪問數據:

上面的長字符串實際上只是一個數組,將這個數組放進javascript變量之后,就可以輕松訪問它。只需要用點好表示法來表示數組元素。

所以要訪問authors列表中的第一個條目的姓名:

people.authors[0].name;


注意,數組索引是從0開始。所以這行代碼首先訪問變量people,然后移動到authors條目,再移動到第一個記錄,最好訪問name鍵的值。結果是:rose1。

使用這樣的語法可以處理任何JSON格式的數據。


修改JSON數據

可以用點號和括號訪問數據,也可以用同樣的方法修改數據。

people.authors[0].name="summer";

在將字符串轉換為javascript對象之后,就可以這樣修改變量的值。

轉換回字符串

將對象轉換回字符串。

String newJSONtext=people.toJSONString();

現在就獲得了一個可以在任何地方使用的文本字符串,如,將它用在AJAX中的請求字符串。

重要的是,可以將任何javascript對象轉換為JSON文本。并非只能處理原來用JSON字符串賦值的變量。現在對名為的對象進行轉換,只需執行相同形式的命令即可:

String myObjectJSON=people.toJSONString();




使用JSON,只需要一個簡單的函數,就可以獲得經過格式化的數據,這樣就可以將數據轉換為可以在請求中發送給服務器端程序的格式。

這種格式很容易用于發送和接收與對象甚至對象數組對應的數據。


JSON的真正價值:

JSON是適用于ajax應用程序的一種有效格式,因為它使javascript對象和字符串值之間得以最快轉換,由于ajax應用程序很適合用純文本發送給服務器端程序,還可以接收純文本。

XML也可以提供文本方面的類似的益處,但用于將javascript對象轉換成XML的幾個現有的API沒有JSON API成熟。

JSON最大的價值及時可以將javascript真正的作為javascript而非數據格式語言進行處理。你之前所學到的所有有關javascript對象的技巧都額可以在代碼中使用,而無需考慮如何將這些對象轉換為文本。你只需在之后,用該JSON方法調用即可:

String myObjectJSON=myObject.toJSONString();

現在就可以可以將結果發送給服務器了。


將JSON發送給服務器

通過GET以名稱/值對發送JSON

將JSON數據發給服務器的最簡單方法就是將其轉換為文本,然后以名稱/值對的值得方法進行發送。注意的是,JSON格式的數據是相當長的一個對象。

var people=
{
  "authors":[
 {"name":"rose1","age":"18","email":"1554@555.com"},
  {"name":"rose2","age":"28","email":"15dd4@555.com"},
   {"name":"rose3","age":"38","email":"5554@555.com"}
  ],
    "musicians":[
 {"name":"rose1","age":"18","email":"1554@555.com"},
  {"name":"rose2","age":"28","email":"15dd4@555.com"},
   {"name":"rose3","age":"38","email":"5554@555.com"}
  ]
}



以上是JSON格式的一個javascript對象。

要以名稱/值對將其發送到服務器端,如下

var  url="xx.php?people="+people.toJSONString();
myhttp.open("GET",url,true);
myhttp.send(null);

值得注意的是,JSON數據中會有空格和各種字符,web瀏覽器往往會試著對其進行解析。要確保這些字符不會再服務器上(或者在將數據發送給服務器的過程中)引起混亂,需要用javascript的escape()方法處理下。

var  url="xx.php?people="+escape(people.toJSONString();)
myhttp.open("GET",url,true);
myhttp.send(null);

TIP: escape()函數可以處理空格,斜線和其他任何可能影響瀏覽器的內容,并將它們轉換成WEB可用字符(如




在使用名稱/值對或XML時,實際上是使用javascript從應用程序中取得數據并將數據轉換成另一種數據格式。

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()