http://www.tuicool.com/articles/3Y3qm2
背景
之前最早的時候,也見過類似於這樣的字符串:
{"list":[ |
很明顯,這樣的字符,看起來,就像是有一種規律的,但是當時只是知道這是個字符串而已。
後來,漸漸地,瞭解到,原來這樣的字符串,是有特定的格式和規律的,其叫做JSON字符串。
什麼是JSON
後來就專門去查了查json是啥。
此處,先引用:
JSON Wiki 中的話:
JSON ( J ava s cript O bject N otation)是一種輕量級的 數據交換語言 ,以文字爲基礎,且易於讓人閱讀。儘管JSON是在 Javascript 的一個子集,但JSON是獨立於語言的 文本格式 ,並且採用了類似於 C語言 家族的一些習慣。
此處,簡單可以理解爲:
JSON的簡要解釋
-
JSON全稱是 J ava s cript O bject N otation,很明顯,是源於Javascript。此處暫可不深究這方面,知道這點即可。
-
JSON是一種字符串,有一定特定的語法格式的字符串;
-
JSON之所以定義這樣的語法格式,目的在於方便數據的交換。即,一些數據,通過JSON這種格式,從一個地方,尤其是網絡上,發送,傳遞到另外一個地方,然後使得接受者,也很容易理解相關的數據。
而具體關於JSON的語法,即規定的怎麼寫,具體是啥樣的格式,不再贅述,只盡量簡單的介紹一下:
最最基本的語法是:
JSON的最基本語法
-
對象,即一個變量名,一個值,對應的寫法是:{name:value}
-
列表,有多個元素是,寫法是:[collection, collection]
餘下的,按照正常邏輯理解即可,比如字符串是兩個雙引號""括起來的,數字是0到9等等。
JSON的例子
wiki中舉的例子是:
{ "firstName": "John", "lastName": "Smith", "male": true, "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
通過此例子,也就算很形象的知道了,JSON算是一個結構很清晰的,用於表示數據的一種格式。
JSON的一些注意事項
發送的JSON字符串是緊湊型(無縮進的)
需要說明的是,由於JSON的發明,就是爲了用於數據交換,所以,在發送JSON字符串之前,其實都不是你所看到的上面的,格式化,帶縮進的那種,都是緊湊型的,字符之間沒有空格的,
就像此文最開始所舉例的那種的,將這些緊湊的數據,發送給別人。
用格式化工具格式化JSON字符串(爲帶縮進的)以方便查看
而接受者,作爲人類,想要查看數據,能清晰的看懂數據,一般會用一些工具,比如 Notepad++ 中的插件 JSMin ,去格式化,
把最開始我們給出的JSON數據,格式化後的效果爲:
程序中是如何處理JSON的
很多程序中,都會遇到JSON字符串,所以就涉及到,如何通過程序處理JSON字符串,比如將JSON字符串,轉換爲對應的字典類的變量等等。
很明顯,當然是可以通過你手動寫代碼,一點點處理的,但是更明顯,效率很低。
而且現實中,的確是,針對不同的語言,已經有了對應的JSON相關庫函數,去用於處理JSON字符串了。
對於這些不同語言的,對應的JSON處理的庫,人家 JSON官網 中,已經幫你整理好了。你自己去看,學習瞭解對應的JSON庫如何使用的,即可。
其中包括了N種語言的,N個JSON處理相關的庫,我就不重複去羅列了,自己去JSON官網 看即可。
此處,只是說說,我所用過的一些JSON的庫:
Python語言中自帶的處理JSON的庫:json
之前折騰過相關的,用Python語言處理JSON字符串的,用的是Python語言內置的Json庫,相對還是很好用的。
相關Python中如何處理json的示例代碼可參考:
相關的折騰,感興趣的可參考:
【整理】Python中將(字典,列表等)變量格式化成(漂亮的,樹形的,帶縮進的,JSON方式的)字符串輸出
【經驗記錄】Python中json.loads的時候出錯->要注意要解碼的Json字符的編碼
另外,有時候,遇到一些特殊的情況,也是可以藉助 BeautifulSoup庫 去幫忙處理的:
【已解決】用BeautifulSoup解析Html格式的Json字符串
C#中處理JSON字符串
之前也折騰過C#中處理JSON字符串的。
只不過當時發現C#內置沒有相關的JSON的庫,還需要再安裝第三方的JSON庫,覺得太麻煩,所以暫且放棄了:
【未解決】C#中從Json.Net解析後的Json中獲得某個列表類型的變量
就暫且先用正則表達式的類Regex去手動處理,提取所需的內容了。
當然,如果有人有需求,還是值得去安裝第三方JSON庫,去處理Json字符串的。
後來的一些折騰,C#中,已經可以很好的處理JSON字符串了。
只是還是需要依賴於.NET 3.5+中的JavaScriptSerializer才行。