一、關於json
json是一種類似於xml的通用資料交換格式,具有比xml更高的傳輸效率.
從結構上看,所有的資料(data)最終都可以分解成三種型別:
第一種型別是標量(scalar),也就是乙個單獨的字串(string)或數字(numbers),比如"北京"這個單獨的詞。
第二種型別是序列(sequence),也就是若干個相關的資料按照一定順序並列在一起,又叫做陣列(array)或列表(list),比如"北京,上海"。
json的規格非常簡單,只用乙個頁面幾百個字就能說清楚,而且douglas crockford聲稱這個規格永遠不必公升級,因為該規定的都規定了。
1) 並列的資料之間用逗號(",")分隔。
2) 對映用冒號(":")表示。
3) 並列資料的集合(陣列)用方括號("")表示。
4) 對映的集合(物件)用大括號("{}")表示。
二、常見的json解析方法
解析json資料首先要明確,解析的json字串是屬於jsonobject還是jsonarray。
android平台上一般有兩種解析技術可供選擇:android內建的org.json包和google的開源的gson庫。
json已經內嵌在了android中,所以在平時的android開發中可以直接使用org.json來直接進行解析,而使用gson需要加入第三方的庫檔案。
三、對於常見json字串的舉例
對於乙個json字串,我們首先需要判斷它是屬於jsonobject還是jsonarray。如果最外層是由所包含的,那麼它就是乙個jsonarray,相當於是乙個json陣列;如果最外層是由{}所包含的,那麼它就是乙個jsonobject,就是乙個json物件。
1、json = ;
這是最常見的對映關係的json字串,而且也只是乙個json物件,所以使用org.json和gson都很簡單,但是一般來說直接使用org.json更為方便。
2、json = [,];jsonobject jsonobject = new jsonobject(json);
string devid = jsonobject.getstring("devid");
string latitude = jsonobject.getstring("latitude");
string longitude = jsonobject.getstring("longitude");
string postime = jsonobject.getstring("postime");
可以看出這是乙個jsonarray,所以只需要在剛才的**基礎上稍加改動就可以了:
3、json = ,"status":};jsonarray jsonarray = new jsonarray(json);
for (int i = 0; i < jsonarray.length(); i++)
通過分析可以看出來,最外層是乙個jsonarray,裡面有兩個jsonobject,分別是data和status,status裡面的就是上面第乙個json那樣的字串,很容易解析,但是data中的json字串就不像我們所見過的那樣,所以這裡對於data裡面的資料解析就要使用一種新的方法了:
jsonobject data = connget.getjsonobject("data");
mapresult = new hashmap();
iterator it = data.keys();
while (it.hasnext())
通過迭代的方式,將data中的資料不斷的讀出來,並放入乙個map集合中,最後所得到的map集合就是乙個乙個的json對了,只需要遍歷map就可以得到結果。
當然也可以使用gson來進行解析,也是很容易的。
將data中的資料看作是乙個map,然後再遍歷map就行了
關於json的一些問題
序言 json在不同的開發語言中被越來越多的應用,大多數應用在介面。但是也會有一些問題產生。下面就是我在開發過程中遇到的兩個關於json的問題,和大家分享一下。一 在我們平常遇到的json格式正規的應該是下面這種 type 12349999 date 2014 10 30 17 6 9 user 1...
JSON使用的一些總結 續
ok,上回講到把json物件轉化為string,可以傳到後台了 在後台如何處理呢?這裡需要匯入乙個json lib 0.7.1.jar的包,裡面包含一些處理json物件的方法 前台在js部分處理的json物件,var noticejsonobjects var noticejsonobject no...
關於stringstream的一些總結
c 標準庫中的提供了比ansi c的更高階的一些功能,即單純性 型別安全和可擴充套件性。可以使用這些庫來實現安全和自動的型別轉換。如果你已習慣了風格的轉換,也許你首先會問 為什麼要花額外的精力來學習基於的型別轉換呢?也許對下面乙個簡單的例子的回顧能夠說服你。假設你想用sprintf 函式將乙個變數從...