DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JSON基礎 >> JSON掃盲帖 JSON.as類教程
JSON掃盲帖 JSON.as類教程
編輯:JSON基礎     

補充內容:
如果json字符串是從html用FlashVars來傳遞參數時那麼字符串中的第一個雙引號(包括雙引號)以後的內容就不會得到傳送. 而adobe的官方json.as類包裡解析josn對象中是少不了雙引號的. 所以搞了半天只後用個字符串替換函數啦!
方法看另一篇文章:
html傳帶雙引號的參數給flash解決方案
--------------------------------------------------------------------------------------
先看下面的轉載內容吧! 前面這些是根據自己的需求的補充內容:
--------------------------------------------------------------------------------------
昨天發了json的AS3解析類,從大家的跟帖上來看,好多人還是不知道這個東西的,特建一個掃盲貼。
其實在AS中使用json其實並不是一個必須或是很好的選擇,因為AS對xml的解析已經很不錯了,但是為什麼可以考慮使用json呢,有以下幾點:
json是介於單純的文本方式(如:firstName=Brett&lastName=McLaughlin&email=brett@newInstance.com)和xml(<request><firstName>Brett</firstName><lastName>McLaughlin</lastName><email>brett@newInstance.com</email></request>)中間的一種格式,他具有文本和xml的中性優勢:數據量小和清晰的數據格式。
json是JavaScript Object Notation的簡寫,那麼意思就是說他是來自於javascript的東西。因為現在ajax的流行,大部分網站會采用ajax的模式和構架,那麼json會是一個數據傳輸的首選(文本方式太簡單,要是大數據量的時候無法理解,xml的方式數據量大,在解析的時候會增加服務器負擔),那麼要是一個網站從ajax構架的基礎上出一個flex/flash版的界面的時候使用json會最少地減少服務器端的程序改動。
服務器端現在有成熟的JSON解析代碼(因為JSON運用太廣泛了),那麼在開發的時候也不用擔心服務器端的解析。
ps:我怎麼只能想到上面三點啊,會不會理由太少了?
JSON 是什麼?
簡單 JSON 示例
按照最簡單的形式,可以用下面這樣的 JSON 表示名稱/值對:
復制代碼 代碼如下:
{ "firstName": "Brett" }

復制代碼這個示例非常基本,而且實際上比等效的純文本名稱/值對占用更多的空間: 復制代碼 代碼如下:
firstName=Brett

復制代碼但是,當將多個名稱/值對串在一起時,JSON 就會體現出它的價值了。首先,可以創建包含多個名稱/值對的記錄,比如:
復制代碼 代碼如下:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }

復制代碼從語法方面來看,這與名稱/值對相比並沒有很大的優勢,但是在這種情況下 JSON 更容易使用,而且可讀性更好。例如,它明確地表示以上三個值都是同一記錄的一部分;花括號使這些值有了某種聯系。
值的數組
當需要表示一組值時,JSON 不但能夠提高可讀性,而且可以減少復雜性。例如,假設您希望表示一個人名列表。在 XML 中,需要許多開始標記和結束標記;如果使用典型的名稱/值對(就像在本系列前面文章中看到的那種名稱/值對),那麼必須建立一種專有的數據格式,或者將鍵名稱修改為 person1-firstName 這樣的形式。
如果使用 JSON,就只需將多個帶花括號的記錄分組在一起:
復制代碼 代碼如下:
{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
]}

復制代碼這不難理解。在這個示例中,只有一個名為 people 的變量,值是包含三個條目的數組,每個條目是一個人的記錄,其中包含名、姓和電子郵件地址。上面的示例演示如何用括號將記錄組合成一個值。當然,可以使用相同的語法表示多個值(每個值包含多個記錄): { "programmers": [
復制代碼 代碼如下:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
]
}

復制代碼這裡最值得注意的是,能夠表示多個值,每個值進而包含多個值。但是還應該注意,在不同的主條目(programmers、authors 和 musicians)之間,記錄中實際的名稱/值對可以不一樣。JSON 是完全動態的,允許在 JSON 結構的中間改變表示數據的方式。
在處理 JSON 格式的數據時,沒有需要遵守的預定義的約束。所以,在同樣的數據結構中,可以改變表示數據的方式,甚至可以以不同方式表示同一事物。
ps:以上例子都是來自http://www.ibm.com/developerworks/cn/web/wa-ajaxintro10/,掌握 Ajax,自己懶,看人家有就順便用了

當當當,我又回來了,上周忙這上班沒顧上寫用法,下面就介紹一下adobe的json類的用法。
上次發表的json類有問題(http://bbs.actionscript3.cn/thread-1625-1-1.html),因為我也是從別人處下載的,誰知道是一個半成品。望大家別生氣啊,建議管理員給刪除了!
這次是adobe的官方的類,我修改了一下包,這次就可以用了。
下面是教程,比較簡單:
1、服務器端來的json
怎麼樣獲得服務器端的json我就不說了吧(就是通訊),那麼得到的應該是一個字符串,存入變量serverJSON,使用方式如下:

復制代碼 代碼如下:
import json.*;
var json:Object = new Object();
json = JSON.decode(serverJSON);


json就是一個對象了,簡單吧。
舉一個例子:
上面的JSON的一段代碼:
復制代碼 代碼如下:
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
]
}

存入變量:serverJSON
代碼:

復制代碼 代碼如下:
var serverJSON:String = '{ "programmers": [{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }],"authors": [{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }],"musicians": [{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }]}'
var s:Object = JSON.decode(serverJSON);
//開始使用
trace(s.programmers[0].firstName);//輸出:Brett


不是吧這麼簡單。其實轉變後就成為一個對象了,可以通過點語法來訪問這些值了。XML靠邊去。
2、本地對象做成JSON
你要是能自己拼出JSON字符串也可以,不過我們是在面向對象的世界啊,那麼我們都是對象啊,到時候對象直接就可以來用了。
舉一個例子:

復制代碼 代碼如下:
import json.*;
var myObject:Object = new Object();
myObject.ab = "adfsdf";
myObject.cd = Math.random();
trace(JSON.encode( myObject ));//輸出:{"ab":"adfsdf","cd":0.0599129400216043}

這樣就可以給服務器了。
總結:就兩個方法,JSON.decode(String),JSON.encode(Object),有這麼簡單的方式實現傳輸量小,而且簡單的數據格式,我們為什麼還不用呢?
其實XML自然也有他自己的強勢,當一個結構復雜的數據結構出現的時候,這個時候JSON就很難搞定了,XML就是首選了。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved