當前位置:首頁 » 安卓系統 » androidjson介面

androidjson介面

發布時間: 2023-07-19 18:50:05

㈠ Android 解析json問題

java">///http地址
StringhttpUrl=ip+":"+埠號+"/loginbyandroid/validate.do";
//HttpPost連接對象
HttpPosthttpRequest=newHttpPost(httpUrl);
//使用NameValuePair來保存要傳遞的Post參數
List<NameValuePair>params=newArrayList<NameValuePair>();
//添加要傳遞的參數
params.add(newBasicNameValuePair("loginId","value"));
params.add(newBasicNameValuePair("password","value"));
//設置字元集
HttpEntityhttpentity;
try{
httpentity=newUrlEncodedFormEntity(params,"utf-8");

//請求httpRequest
httpRequest.setEntity(httpentity);
//取得默認的HttpClient
HttpClienthttpclient=newDefaultHttpClient();
//取得HttpResponse
HttpResponsehttpResponse;
httpResponse=httpclient.execute(httpRequest);
//HttpStatus.SC_OK表示連接成功
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
//取得返回的字元串
StringstrResult=EntityUtils.toString(httpResponse
.getEntity());
JSONArrayjsonArray=newJSONArray(strResult);
for(inti=0;i<jsonArray.length();i++){
JSONObjectjsonObject=(JSONObject)jsonArray.opt(i);
Stringsuccess=jsonObject.getString("success");
StringJSESSIONID=jsonObject.getString("JSESSIONID");
StringloginName=jsonObject.getString("loginName");
Stringorgname=jsonObject.getString("orgname");
System.out.println("success="+success
+"JSESSIONID="+JSESSIONID+"loginName="
+loginName+"orgname="+orgname);
}
}else{
System.out.println("請求錯誤!");
}
}catch(ClientProtocolExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}

㈡ android 用JSON 解析數據介面方法

介面獲取下來的數據為

{"status":200,"message":"查詢成功","data":{"id":32,"user_id":null,"user_code":null,"user_pass":null,"meeting_id":"1","meeting_pass":null,"config_param_ip":"11.1.1.70","port":"6501","web_config_param_ip":"11.1.1.70","web_port":"6501","unit_code":null,"create_time":null,"update_time":null,"status":0,"userCode":"video1","userPass":"video1","meetingId":"1","meetingPass":"","apiPort":"13000","username":"admin","password":"123456","updateTime":"2021-11-08 17:45:29"}}

使用方法

try {

    JSONObject jsonObject = new JSONObject(outstring);

    int resultCode = jsonObject.getInt("status");

    if (resultCode == 200) {

        JSONObject obj = jsonObject.getJSONObject("data");

        IP = obj.getString("config_param_ip");

        port = obj.getString("web_port");

        username = obj.getString("userCode");

        password = obj.getString("userPass");

        roomID = Integer.parseInt(obj.getString("meetingId"));

        roomPassword = obj.getString("password");

    } else {

        ToastUtils.showShort("查詢失敗");

    }

    goVideo();

} catch (Exception e) {

    e.printStackTrace();

}

㈢ Android 中解析 JSON

JSON( JavaScript Object Notation ) 是一種輕量級的數據交換格式。易於閱讀和編寫,同時也易於機器解析和生成。

JSON 建構於兩種結構:

JSON 具有以下這些格式:

參考: Android 中 解析 JSON

Android 提供類四種不同的類來操作 JSON 數據。這些類是 JSONArray、JSONObject、JSONStringer 和 JSONTokenizer

為了解析 JSON 對象,須先創建一個 JSONObject 類的對象,需要傳入需解析的字元串 JSONObject root = new JSONObject(candyJson); 然後根據 JSONObject 對象提供方法以及數據類型解析對應 json 數據。下表展示一些 JSONObiect 提供的方法

示例:

㈣ android如何從一個網路介面中獲得json數據,並且進行解析呢

你可以用jsonsmart來解析: JSONValue.parseStrict(返回的數據) 進行解析,之後再根據json欄位拿數據

㈤ android怎麼樣獲取並解析json數據

json數據 是從介面獲取來的 其實就是一串字元串 可以用Gson解析。
Gson gson =new Gson( ),然後調用fromJson 方法解析

㈥ Android開發中為什麼很少使用JSON存儲數據

是可以用JSON存儲數據對象的,而且也是Google推薦的,可以取代以實現Serializable來存儲對象的方法。下面是使用JSON存儲數據的原因。Android開發中,涉及到對象存儲,通常的做法是直接實現`Serializable`。有關這個介面,它保證了實現該介面的類的對象能夠… 顯示全部是可以用JSON存儲數據對象的,而且也是Google推薦的,可以取代以實現Serializable來存儲對象的方法。下面是使用JSON存儲數據的原因。

Android開發中,涉及到對象存儲,通常的做法是直接實現`Serializable`。有關這個介面,它保證了實現該介面的類的對象能夠被`ObjectOutput/InputStream`直接輸入輸出,即序列化。這很方便,但是也很不好。

提到『序列化』,大多數人都想到`Serializable`,而實際上『序列化』的只是指「將對象的狀態信息轉換為可以存儲或傳輸的形式的過程」,Java的`Serializabe`是位元組序列化的一種。

`Serialziable`的缺點之一是,實現了該介面的類將失去靈活性。這一點《Effective Java》第74條也指出了,實現了這個`Serializable`的類將會依賴這個類的內部演化,根源在於UID(Serial version UID)。如果你沒有指定UID,那麼每次這個類被序列化時都會根據這個類的當前狀態生成一個UID。想像這么一種場景:這個類已經被導出了,比如發給其他公司或部門使用了,然後你又修改了這個類,那麼當你再將這個類發布時,由於UID不同,其他公司或部門的程序員將可能得到一個「InvalidClassException」。

這種情況的根本原因是因為你不能控制序列化的實現,你控制不了UID的生成過程。這就需要一個自定義的序列化形式。在Android中,Google推薦JSON序列化。而且Android程序員也可以使用Gson等工具來進行序列化和反序列化。

和`Serializable`的位元組序列化不同,JSON序列化是字元序列化。

此外,`Serializable`只適合存儲對象。由於在傳輸時`Serializalbe`要做大量IO,Android提供了`Parcelable`。

最後,題主不應該把資料庫和JSON,XML比較,如果要比,也只能把資料庫和文件存儲比。資料庫適合存儲數量大,關系復雜的數據,這樣管理,查閱就很方便。與此相對文件存儲適合數量小,關系簡單的數據。

㈦ Android如何傳輸參數給一個url介面 參數是json格式

一般傳輸參數使用json類型或者map類型都是使用post方法。

使用json數據格式發送信息向伺服器端:
HttpClient httpClient = new DefaultHttpClient();
try {
HttpPost httpPost = new HttpPost(BASIC_URL + url);
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
JSONObject jsonObject = new JSONObject();
JSONObject jsonObject2 = new JSONObject();
jsonObject.put("uemail", userbean.getEmail());
jsonObject.put("password", userbean.getPassword());
jsonObject2.put("userbean", jsonObject);
nameValuePair.add(new BasicNameValuePair("jsonString", jsonObject
.toString()));
Log.i("lifeweeker", jsonObject2.toString());
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));

㈧ android 怎麼用json解析介面(本人新手,請大手幫忙解決下)

fastjson.jar這個jar包可以方便的幫你解析json格式數據:
你可以參考下我這段代碼:
public Object parseMap_Sub(String str) {
try {

Map<String, Object> map = JSON.parseObject(str);
JSONArray jsonArray = (JSONArray) map.get("data");
List<NearMap_Info> list_detial = new ArrayList<NearMap_Info>();
for (Object o : jsonArray) {
Map<String, String> map_1 = (Map<String, String>) o;
NearMap_Info audio_info = new NearMap_Info();
//audio_info.setSize((String) map.get("size"));
audio_info.setFlag(map_1.get("flag"));
audio_info.setTitle(map_1.get("title"));
audio_info.setUrl(map_1.get("url"));
audio_info.setType(map_1.get("type"));
audio_info.setId(map_1.get("id"));
audio_info.setImg(map_1.get("img"));
list_detial.add(audio_info);
}
ro.result = true;
ro.obj = list_detial;
} catch (Exception e) {
e.printStackTrace();
ro.result = false;
}
return ro;
}

㈨ Android使用Gson解析網路介面返回的Json數據

Gson挺好用的,可以把json串直接解析成bean對象,或者把對象轉換成json串,數據解析的時候先創建Gson對象

GsonmGson=newGson();

然後再把json串解析成bean對象

Beanbean=mGson.fromJson(json,Bean.class);


如果想把對象轉成json串可以用gson的toJson方法

Stringjson=mGson.toJson();

純手打,滿意請採納

㈩ Android Gson 使用詳解

Json 是一種文本形式的數據交換格式,比 xml 更為輕量。Json 的解析和生成的方式很多,在 Android 平台上最常用的類庫有 Gson 和 FastJson 兩種,這里要介紹的是 Gson

Gson 的 GitHub 主頁點擊這里: Gson

在進行序列化與反序列操作前,需要先實例化一個 com .google.gson.Gson 對象,獲取 Gson 對象的方法有兩種

利用 Gson 可以很方便地生成 Json 字元串,通過使用 addProperty 的四個重載方法

addProperty 方法底層調用的是 add(String property, JsonElement value) 方法,即將基本數據類型轉化為了 JsonElement 對象,JsonElement 是一個抽象類,而 JsonObject 繼承了 JsonElement ,因此我們可以通過 JsonObject 自己來構建一個 JsonElement

Json數組 與 字元串數組

Json數組 與 List

Gson 也提供了 toJson() 和 fromJson() 兩個方法用於轉化 Model 與 Json,前者實現了序列化,後者實現了反序列化
首先,聲明一個 User 類

序列化的方法很簡單,調用 gson 對象的 toJson 方法,傳入要序列化的對象

反序化的方式也類似

繼續使用上一節聲明的 User 類,根據 User 類聲明的各個屬性名,移動端的開發者希望介面返回的數據格式即是如下這樣的

如果沒有和伺服器端溝通好或者是 API 改版了,介面返回的數據格式可能是這樣的

如果繼續使用上一節介紹的方法,那無疑會解析出錯
例如

name 屬性值解析不到,所以為 null

此時為了兼顧多種格式的數據,就需要使用 SerializedName 註解
根據 SerializedName 的聲明來看,SerializedName 包含兩個屬性值,一個是字元串,一個是字元串數組,而字元串數組含有默認值

SerializedName 的作用是為了在序列化或反序列化時,指導 Gson 如果將原有的屬性名和其它特殊情況下的屬性名聯系起來

例如,修改 User 類,為 name 聲明 SerializedName 註解,註解值為 userName

在序列時,Json 格式就會相應改變

在反序列化時也一樣,能夠解析到正確的屬性值

還有個問題沒解決,為了應對多種屬性名不一致的情況,難道我們要聲明多個 User 類嗎?這顯然是不現實的,所以還需要為 User 類設置多個備選屬性名,這就需要用到 SerializedName 註解的另一個屬性值 alternate 了。

以下幾種情況都能夠被正確的反序列化

有時候並不是所有的欄位都需要進行系列化和反序列化,因此需要對某些欄位進行排除,有四種方法可以來實現這種需求。

Expose 註解包含兩個屬性值,且均聲明了默認值。Expose 的含義即為「暴露」,即用於對外暴露欄位,serialize 用於指定是否進行序列化,deserialize 用於指定是否進行反序列化。如果欄位不聲明 Expose 註解,則意味著不進行序列化和反序列化操作,相當於兩個屬性值均為 false 。此外,Expose 註解需要和 GsonBuilder 構建的 Gson 對象一起使用才能生效。

Expose 註解的註解值聲明情況有四種

現在來看個例子,修改 User 類

按照如上的註解值,只有聲明了 Expose 註解且 serialize 值為 true 的欄位才能被序列化,只有聲明了 Expose 註解且 deserialize 值為 true 的欄位才能被反序列化

Gson 提供了 @Since 和 @Until 兩個註解基於版本對欄位進行過濾,@Since 和 @Until 都包含一個 Double 屬性值,用於設置版本號。Since 的意思是「自……開始」,Until 的意思是「到……為止」,一樣要和 GsonBuilder 配合使用。

當版本( GsonBuilder 設置的版本) 大於或等於 Since 屬性值或小於 Until 屬性值時欄位會進行序列化和反序列化操作,而沒有聲明註解的欄位都會加入序列化和反序列操作

現在來看個例子,修改 User 類

訪問修飾符由 java.lang.reflect.Modifier 提供 int 類型的定義,而 GsonBuilder 對象的 excludeFieldsWithModifiers 方法接收一個 int 類型可變參數,指定不進行序列化和反序列化操作的訪問修飾符欄位
看個例子

GsonBuilder 類包含 setExclusionStrategies(ExclusionStrategy... strategies) 方法用於傳入不定長參數的策略方法,用於直接排除指定欄位名或者指定欄位類型
看個例子

欄位名為 "intField" 和欄位類型為 double 的欄位都會被排除掉

setExclusionStrategies 方法在序列化和反序列化時都會生效,如果只是想指定其中一種情況下的排除策略或分別指定排除策略,可以改為使用以下兩個方法

對於 Gson 而言,在序列化時如果某個屬性值為 null 的話,那麼在序列化時該欄位不會參與進來,如果想要顯示輸出該欄位的話,可以通過 GsonBuilder 進行配置

默認的序列化後的 Josn 字元串並不太直觀,可以選擇格式化輸出

Gson 也可以對時間值進行格式化

TypeAdapter 是一個泛型抽象類,用於接管某種類型的序列化和反序列化過程,包含兩個抽象方法,分別用於自定義序列化和反序列化過程

下面看個簡單的例子

定義 TypeAdapter 的子類 UserTypeAdapter 來接管 User 類的序列化和反序列化過程
這里設定當 User 類序列化時 Json 中的Key值都是大寫字母開頭,反序列化時支持「name」和「Name」兩種不同的 Json 風格

可以看到 User 類按照預定義的策略來完成序列化和反序列化了

TypeAdapter 將序列化和反序列操作都接管了過來,其實 Gson 還提供了只接管序列化過程的介面,即 JsonSerializer
看個例子

相對應的,JsonDeserializer 介面提供了反序列化的介面

這里有個比較麻煩的地方,那就是在使用 TypeAdapter 、JsonSerializer JsonDeserializer 時,總需要調用 registerTypeAdapter 方法進行注冊,那有沒有更簡單的注冊方法呢?
有的,Gosn 還提供了另一個註解 @JsonAdapter 用於進行簡單的聲明

類似於這樣,聲明了 User 類的序列化或反序列化操作由 UserTypeAdapter 完成,註解的優先順序高於 registerTypeAdapter 方法

TypeAdapterFactory 是用於創建 TypeAdapter 的工廠類,通過參數 TypeToken 來查找確定對應的 TypeAdapter,如果沒有就返回 null 並由 Gson 默認的處理方法來進行序列化和反序列化操作,否則就由用戶預定義的 TypeAdapter 來進行處理

這一篇文章好像寫得太長了一點?Gson 的知識點介紹到這里也差不多了,以後如果還發現新內容的話我會繼續補充,現在就先這樣啦

熱點內容
手機配置內存顏色怎麼看 發布:2025-02-05 12:47:36 瀏覽:198
電腦伺服器盤口順序 發布:2025-02-05 12:40:20 瀏覽:663
mcpe伺服器怎麼開 發布:2025-02-05 12:40:13 瀏覽:835
linux文件記錄 發布:2025-02-05 12:39:31 瀏覽:775
編程獎金計算 發布:2025-02-05 12:27:01 瀏覽:185
軟體怎麼去掉付費配置 發布:2025-02-05 12:26:17 瀏覽:504
安卓手機怎麼下載谷歌商店apk 發布:2025-02-05 12:21:09 瀏覽:367
騰訊視頻的緩存在哪裡 發布:2025-02-05 12:21:03 瀏覽:710
安卓聊天記錄未備份怎麼恢復 發布:2025-02-05 12:05:02 瀏覽:953
海外搭建伺服器可以連外網嗎 發布:2025-02-05 11:49:21 瀏覽:64