json的用法
json格式
JSON格式:http://www.json.org/
python和JSON的關系請參考:http://docs.python.org/library/json.html
JSON建構有兩種結構:
1.?“名稱/值”對的集合(A?collection?of?name/value?pairs)。不同的語言中,它被理解為對象(object),記錄(record),結構(struct),字典(dictionary),哈希表(hash?table),有鍵列表(keyed?list),或者關聯數組?(associative?array)。
2.值的有序列表(An?ordered?list?of?values)。在大部分語言中,它被理解為數組(array)。
基礎示例
簡單地說,JSON?可以將?JavaScript?對象中表示的一組數據轉換為字符串,然后就可以在函數之間輕松地傳遞這個字符串,或者在異步應用程序中將字符串從?Web?客戶機傳遞給服務器端程序。這個字符串看起來有點兒古怪,但是?JavaScript?很容易解釋它,而且?JSON?可以表示比"名稱?/?值對"更復雜的結構。例如,可以表示數組和復雜的對象,而不僅僅是鍵和值的簡單列表。
表示名稱?/?值對
按照最簡單的形式,可以用下面這樣的?JSON?表示"名稱?/?值對":
{?"firstName":?"Brett"?}?
這個示例非常基本,而且實際上比等效的純文本"名稱?/?值對"占用更多的空間:
firstName=Brett?
但是,當將多個"名稱?/?值對"串在一起時,JSON?就會體現出它的價值了。首先,可以創建包含多個"名稱?/?值對"的?記錄,比如:
{?"firstName":?"Brett",?"lastName":"McLaughlin",?"email":?"aaaa"?}?
從語法方面來看,這與"名稱?/?值對"相比并沒有很大的優勢,但是在這種情況下?JSON?更容易使用,而且可讀性更好。例如,它明確地表示以上三個值都是同一記錄的一部分;花括號使這些值有了某種聯系。
表示數組
當需要表示一組值時,JSON?不但能夠提高可讀性,而且可以減少復雜性。例如,假設您希望表示一個人名列表。在?XML?中,需要許多開始標記和結束標記;如果使用典型的名稱?/?值對(就像在本系列前面文章中看到的那種名稱?/?值對),那么必須建立一種專有的數據格式,或者將鍵名稱修改為?person1-firstName這樣的形式。
如果使用?JSON,就只需將多個帶花括號的記錄分組在一起:
{?"people":?[?
{?"firstName":?"Brett",?"lastName":"McLaughlin",?"email":?"aaaa"?},?
{?"firstName":?"Jason",?"lastName":"Hunter",?"email":?"bbbb"},?
{?"firstName":?"Elliotte",?"lastName":"Harold",?"email":?"cccc"?}?
]}?
這不難理解。在這個示例中,只有一個名為?people的變量,值是包含三個條目的數組,每個條目是一個人的記錄,其中包含名、姓和電子郵件地址。上面的示例演示如何用括號將記錄組合成一個值。當然,可以使用相同的語法表示多個值(每個值包含多個記錄):
{?"programmers":?[
{?"firstName":?"Brett",?"lastName":"McLaughlin",?"email":?"aaaa"?},?
{?"firstName":?"Jason",?"lastName":"Hunter",?"email":?"bbbb"?},?
{?"firstName":?"Elliotte",?"lastName":"Harold",?"email":?"cccc"?}
],
"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?格式的數據時,沒有需要遵守的預定義的約束。所以,在同樣的數據結構中,可以改變表示數據的方式,甚至可以以不同方式表示同一事物。
格式應用
掌握了?JSON?格式之后,在?JavaScript?中使用它就很簡單了。JSON?是?JavaScript?原生格式,這意味著在?JavaScript?中處理?JSON?數據不需要任何特殊的?API?或工具包。
將?JSON?數據賦值給變量
例如,可以創建一個新的?JavaScript?變量,然后將?JSON?格式的數據字符串直接賦值給它:
var?people?=?{?"programmers":?[?{?"firstName":?"Brett",?"lastName":"McLaughlin",?"email":?"aaaa"?},?
{?"firstName":?"Jason",?"lastName":"Hunter",?"email":?"bbbb"?},?
{?"firstName":?"Elliotte",?"lastName":"Harold",?"email":?"cccc"?}
],
"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"?}?
]?}?
這非常簡單;現在?people包含前面看到的?JSON?格式的數據。但是,這還不夠,因為訪問數據的方式似乎還不明顯。
訪問數據
盡管看起來不明顯,但是上面的長字符串實際上只是一個數組;將這個數組放進?JavaScript?變量之后,就可以很輕松地訪問它。實際上,只需用點號表示法來表示數組元素。所以,要想訪問?programmers?列表的第一個條目的姓氏,只需在?JavaScript?中使用下面這樣的代碼:
people.programmers[0].lastName;?
注意,數組索引是從零開始的。所以,這行代碼首先訪問?people變量中的數據;然后移動到稱為?programmers的條目,再移動到第一個記錄([0]);最后,訪問?lastName鍵的值。結果是字符串值?“McLaughlin”。
下面是使用同一變量的幾個示例。
people.authors[1].genre?//?Value?is?"fantasy"?
people.musicians[3].lastName?//?Undefined.?This?refers?to?the?fourth?entry,?and?there?isn't?one?
people.programmers[2].firstName?//?Value?is?"Elliotte"?
利用這樣的語法,可以處理任何?JSON?格式的數據,而不需要使用任何額外的?JavaScript?工具包或?API。
修改?JSON?數據
正如可以用點號和括號訪問數據,也可以按照同樣的方式輕松地修改數據:
people.musicians[1].lastName?=?"Rachmaninov";?
在將字符串轉換為?JavaScript?對象之后,就可以像這樣修改變量中的數據。
轉換回字符串
當然,如果不能輕松地將對象轉換回本文提到的文本格式,那么所有數據修改都沒有太大的價值。在?JavaScript?中這種轉換也很簡單:
String?newJSONtext?=?people.toJSONString();?
這樣就行了!現在就獲得了一個可以在任何地方使用的文本字符串,例如,可以將它用作?Ajax?應用程序中的請求字符串。
更重要的是,可以將?任何JavaScript?對象轉換為?JSON?文本。并非只能處理原來用?JSON?字符串賦值的變量。為了對名為?myObject的對象進行轉換,只需執行相同形式的命令:
String?myObjectInJSON?=?myObject.toJSONString();?
這就是?JSON?與本系列討論的其他數據格式之間最大的差異。如果使用?JSON,只需調用一個簡單的函數,就可以獲得經過格式化的數據,可以直接使用了。對于其他數據格式,需要在原始數據和格式化數據之間進行轉換。即使使用?Document?Object?Model?這樣的?API(提供了將自己的數據結構轉換為文本的函數),也需要學習這個?API?并使用?API?的對象,而不是使用原生的?JavaScript?對象和語法。
最終結論是,如果要處理大量?JavaScript?對象,那么?JSON?幾乎肯定是一個好選擇,這樣就可以輕松地將數據轉換為可以在請求中發送給服務器端程序的格式。
轉載于:https://www.cnblogs.com/chenrong/p/3578578.html
總結
- 上一篇: ipython 学习笔记 2 netwo
- 下一篇: fdsgds