05_HUD_Qt_for_Python開發(fā)之路3
1093
2022-05-29
1.JSON
JSON是JavaScript Object Notation的縮寫,是JavaScript標(biāo)準(zhǔn)的一個(gè)子集。官方Android API已經(jīng)內(nèi)置支持讀寫JSON數(shù)據(jù)。這種格式非常適合表示不包含二進(jìn)制數(shù)據(jù)的復(fù)雜對象。從某種程度上說,它也成了網(wǎng)絡(luò)上共享數(shù)據(jù)的事實(shí)標(biāo)準(zhǔn)。
下面的例子顯示了一個(gè)簡單的JSON數(shù)組,它包含3個(gè)對象,每個(gè)對象都存儲People的信息。這種格式非常適合在網(wǎng)絡(luò)服務(wù)上發(fā)送任務(wù)或者直接在朋友中共享數(shù)據(jù)。
[
{
"name":"liyuanjinglyj",
"age":"22",
"lon":"12"
},
{
"name":"fengxinyao",
"age":"24",
"lon":"22"
},
{
"name":"hefan",
"age":"23",
"lon":"11"
}
]
從InputStream讀取JSON數(shù)據(jù)最好使用JsonReader API,如下所示:
public JSONArray readPeopleFromInputStream(InputStream inputStream){ InputStreamReader reader=new InputStreamReader(inputStream); JsonReader jsonReader=new JsonReader(reader); JSONArray jsonArray=new JSONArray(); try { jsonReader.beginArray(); while(jsonReader.hasNext()){ JSONObject jsonObject=readSingleJSON(jsonReader); jsonArray.put(jsonObject); } jsonReader.endArray(); } catch (Exception e) { e.printStackTrace(); } return jsonArray; } private JSONObject readSingleJSON(JsonReader jsonReader)throws Exception{ JSONObject jsonObject=new JSONObject(); jsonReader.beginObject(); JsonToken token; do{ String name=jsonReader.nextName(); if("name".equals(name)){ jsonObject.put("name",jsonReader.nextString()); }else if("age".equals(name)){ jsonObject.put("age",jsonReader.nextString()); }else if("lon".equals(name)){ jsonObject.put("lon",jsonReader.nextString()); } token=jsonReader.peek(); }while(token!=null&&!token.equals(JsonToken.END_OBJECT)); jsonReader.endObject(); return jsonObject; }
雖然也可以把InputStream中的全部內(nèi)容都讀到String中,然后傳給JSONArray的構(gòu)造函數(shù),但前面的方法消耗內(nèi)存少,并且很可能很快。同樣,JsonWriter類允許OutputStream高效地寫入JSON數(shù)據(jù),如下所示:
public void writePeopleJSON(JSONArray jsonArray,OutputStream outputStream) throws Exception { OutputStreamWriter write=new OutputStreamWriter(outputStream); JsonWriter jsonWrite=new JsonWriter(write); int arrayLength=jsonArray.length(); jsonWrite.beginArray(); for (int i = 0; i < arrayLength; i++) { JSONObject jsonObject= (JSONObject) jsonArray.get(i); jsonWrite.beginObject(); jsonWrite.name("name").value(jsonObject.getString("name")); jsonWrite.name("age").value(jsonObject.getString("age")); jsonWrite.name("lon").value(jsonObject.getString("lon")); jsonWrite.endObject(); } jsonWrite.endArray(); jsonWrite.close(); }
JSONObject和JSONArray類使用起來很方便,但它們有一定的局限性,并且通常會消耗更多不必要的內(nèi)存。同樣,如果有多個(gè)不同類型的對象,使用JsonReader和JsonWriteer需要編寫相當(dāng)多的代碼。如果為更高級的JSON數(shù)據(jù)序列化和反序列化方法,可以使用優(yōu)秀的開源庫Gson。
Gson允許把簡單的Java對象(Plain Old Object,POJO)轉(zhuǎn)換成JSON,反之亦然。開發(fā)者所要做的就是把數(shù)據(jù)定義成普通的Java對象,提供get和set方法,并在項(xiàng)目中引入Gson庫。
下面的類顯示了一個(gè)表示任務(wù)的簡單Java對象:
public class People { private String name; private String age; private String lon; public void setName(String name) { this.name = name; } public void setAge(String age) { this.age = age; } public void setLon(String lon) { this.lon = lon; } public String getName() { return name; } public String getAge() { return age; } public String getLon() { return lon; } }
public Collection
Java JSON
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。