關於JSON的一些總結

2021-07-07 07:03:33 字數 1955 閱讀 9310

一、關於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更為方便。

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");

2、json =  [,];

可以看出這是乙個jsonarray,所以只需要在剛才的**基礎上稍加改動就可以了:

jsonarray jsonarray = new jsonarray(json);

for (int i = 0; i < jsonarray.length(); i++)

3、json = ,"status":};

通過分析可以看出來,最外層是乙個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 函式將乙個變數從...