客戶端開發通常要從伺服器獲取資料,所以就需要呼叫後台的介面,然後獲得後台返回的資料,根據這些資料的格式進行json解析。
由於後台返回的資料會有不同的格式,所以前端也要採取不同的json.parse()方法進行解析。
首先,來講一下json資料。
簡單的json資料就像下面這種,我們稱之為名稱/鍵對:
我們在客戶端解析的時候可以新建乙個如下的乙個物件類:public class usermodel然後把獲取到的資料data進行資料解析,方法如下(其中user是usermodel的乙個物件):public void
setname(string name)
public string getpassword()
public void
setpassword(string password)
}
user = json.parseobject(data, usermodel.class);解析出來後我們就可以在相應的activity或fragement介面對這個user進行使用,通過user.get()方法把從後台獲取到的name和password值賦值給我們想要顯示的地方。就比如我們寫了乙個textview用來顯示name,只需要
textview tvname = (textview)findviewbyid(r.id.***);
tvname.settext(model.getname());
除了上面這種簡單的傳遞物件的json格式,我們也經常會遇到傳遞陣列的情況,這種情況比傳遞名稱/鍵對相對來說複雜一點,類似於下面這樣:
,這其實就是乙個list的陣列,所以我們像下面這種方式對這個陣列進行json解析(其中list是lis的乙個物件):]}
list = json.parseobject(data, new typereference>() );**中的typereference可以用來應對複雜的泛型,通過解析我們可以把這個list以及其中的資料放到我們想要設定的地方。這些都是相對比較簡單的資料,所以來說一下陣列和名稱/鍵值結合一塊用的,示例的返回資料如下:
}]}
對於這樣的一串資料,首先我們要看最外層的是陣列型別還是名稱/鍵值物件,由於上面的資料最外層是由"[ ]"括起來的,所以user_hobby很明顯是乙個陣列,然後在這個陣列裡面有三個字段:name、password、hobby,在hobby裡面最外層又是由""組成的,因此hobby是乙個名稱/鍵對。我們可以有里及外的剖析:
首先可以新建乙個hobbymodel物件類,其中新增id和hobbyname這兩個欄位和他們的set/get方法,這個就不說了,和上面的usermodel類似,然後我們可以再新建乙個aboutmemodel物件類,不同的是我們的字段有了一些變化,主要**如下:
private string name;private string password
;
private listlist同樣的,我們可以用下面這條語句取到我們想要的值:;
list = json.parseobject(data, new typereference>() );那麼如何拿到這些資料呢?陣列的話我們可以用for迴圈,比如我們要取到「sherry」這條資料,就可以用for迴圈,也就是list.get(0).getname(),而如果要取到hobbyname,也就是list.get(0).gethobby().get(0).gethobbyname()。
不過由於我們是要調後台介面的,所以有時候後台傳送的資料不符合我們的要求,為了避免這個問題,我們可以自己製造json假資料。首先我們假設我們希望後台傳給我們的資料是上面那一條,我們可以把從後台獲取的data重新賦值,**如下:
string data = "}]}"在上面的**中有很多「\",這是因為我們的資料中有一些資料是string型別的,需要有""包裹,而單獨使用「」會引起報錯,所以需要「\"進行轉義,\」也就是我們string語句中的「。;
以上就是我關於json解析的一些小見解,有不對的地方歡迎指正。
list = json.parseobject(data, new typereference>() );
Json資料封裝和解析
新增dll引用 右鍵專案 新增引用 net 選擇 c program files x86 reference assemblies microsoft framework v3.0 system.runtime.serialization.dll c program files x86 refere...
IOS轉換和解析JSON資料
在ios開發中常用到使用json資料向伺服器傳送請求和接收資料,本例使用ios5自帶解析類nsjsonserialization方法解析,無需匯入包,ios5支援,但是低版本ios不支援。1.首先建立資料模型 mydata.h import import srtcjsonobject.h inte ...
C 使用Json封裝資料和解析資料
編譯出來的庫名 json vc71 libmtd.lib debug json vc71 libmt.lib release 需要包含的標頭檔案 jsoncpp src 對應原始碼 include json 該目錄下所有檔案 呼叫庫方式 include json json.h ifdef debug...