Android解析JSON資料幾種方式對比
Json介紹
Json(JavaScript Object Natotion)是一種輕量級的資料交換格式,具有良好的可讀性和便於快速編寫的特性,主要用於傳送資料。Json是一種取代Xml的資料結構,相比於xml更小巧,從而減少資料傳輸流量和佔用的頻寬。
Json語法
{ } 表示物件
[ ] 表示陣列
" " 表示值或屬性
: 表示前面是key後面是value,value可以是字串、數字或者另一個數組或物件
舉個例子 {"name":"tom"},表示屬性名為name,值是tom。[ {"name":"tom"}, {"name":"jack"}] 這個表示2個物件的陣列,等價於{"name":["tom","jack"]}這是一個擁有name陣列的物件。
傳統方式(使用org.json包)
下面給出生成json字串和解析json字串的方法。
org.json包提供了5個類,分別為JSONArray,JSONObject,JSONStringer,JSONTokener和JSONException。/** * 將物件轉換成json資料 * @param user * @return */ public static String buildJson(User user) { try { JSONObject juser = new JSONObject(); juser.put("name", user.getName()); juser.put("pwd",user.getPwd()); return juser.toString(); }catch (JSONException e) { Log.e("JSON_ERROR",e.getMessage()); } return null; } /** * 將json資料轉換成物件 * @param json * @return */ public static User getUser(String json) { JSONTokener jsonTokener = new JSONTokener(json); try { JSONObject user = (JSONObject) jsonTokener.nextValue(); if (user != null) { String name = user.getString("name"); String pwd = user.getString("pwd"); return new User(name,pwd); } }catch (JSONException e){ Log.e("JSON_ERROR",e.getMessage()); } return null; } /** * 將json資料轉換成User集合 * @param key * @param json * @return */ public static List<User> getUsers(String key,String json) { List<User> list = new ArrayList<User>(); try { JSONObject jsonObject = new JSONObject(json); if (jsonObject != null) { JSONArray array = jsonObject.getJSONArray(key); if (array != null && array.length() > 0 ) { for (int i = 0; i < array.length(); i ++) { JSONObject userJson = array.getJSONObject(i); User user = new User(); user.setName(userJson.getString("name")); user.setPwd(userJson.getString("pwd")); list.add(user); } } return list; } }catch (JSONException e) { Log.e("JSON_ERROR",e.getMessage()); } return null; }
JSONException異常類
JSONStringer有序構造
JSONObject無序構造
JSONArray 陣列物件
JSONStringer傳入的鍵值對是有序的,JSONObject傳入的鍵值對是無序的,一般情況下使用JSONObject即可,但對於一些巢狀的Json以及一些JSONArray沒有key只有value的情況,則使用JSONStringer。
使用類庫Gson
類似Gson的json庫常用的有Gson外還有Jackson和FastJson,對於這三個效能的對比網上眾說紛紜,當然這跟他們實現的程式碼有很大的關係,不過個人測試後發現Jackson和FastJson的序列化和反序列化效能相當。Gson效能相比弱一些,但是很穩定。<span style="font-size:18px;font-weight: bold;"> </span><span style="font-size:14px;"> /** * 使用Gson框架將物件轉換成String * @param user * @return */ public static String getJson(User user) { Gson gson = new Gson(); return gson.toJson(user); } /** * 使用Gson將String轉換成物件 * @param json * @return */ public static User getUser(String json) { Gson gson = new Gson(); try { return gson.fromJson(json,User.class); }catch (Exception e) { Log.e("TAG",e.getMessage()); } return null; } /** * 使用Gson將String轉換成物件集合 * @param json * @return */ public static List<User> getUsers(String json) { Gson gson = new Gson(); try { return gson.fromJson(json, new TypeToken<List<User>>(){}.getType()); }catch (Exception e) { e.printStackTrace(); } return null; }</span>
相關推薦
Android解析JSON資料幾種方式對比
Json介紹 Json(JavaScript Object Natotion)是一種輕量級的資料交換格式,具有良好的可讀性和便於快速編寫的特性,主要用於傳送資料。Json是一種取代Xml的資料結構,相比於xml更小巧,從而減少資料傳輸流量和佔用的頻寬。 Json語法 {
$.ajax()方法從伺服器獲取json資料幾種方式詳解
一.什麼是json json是一種取代xml的資料結構,和xml相比,它更小巧但描述能力卻很強,網路傳輸資料使用流量更少,速度更快。 json就是一串字串,使用下面的符號標註。 {鍵值對} : json物件 [{},{},{}] :json陣列 "" :雙引號內是屬性或值
Android程序間通訊 - 幾種方式的對比總結
什麼是RPC RPC(Remote Procedure Call)即遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,在不需要了解底層網路技術的協議下,即可獲取計算機程序中的資料。RPC使得開發包括網路分散式多程式在內的應用程式更加容易。 RPC在OSI網路通訊7層模型中
Windows上安裝配置SSH教程(7)——幾種方式對比
由於 客戶端 方案 body open ins 下使用 上傳下載 直接 服務端:Windows XP 客戶端:Windows 10 由於Cygwin也可以安裝OpenSSH,所以客戶端其實可以直接使用Cygwin安裝OpenSSH,那麽在Windows下使用SCP(安全拷貝
Android activity間通訊幾種方式
read flag 進程 destroy ads sage on() sting ogl Activity 通訊 Bundle 我們可以通過將數據封裝在Bundle對象中 ,然後在Intent跳轉的時候攜帶Bundle對象 bundle 本質上是使用 arrayMap實現
_044_Android_解析XML的幾種方式的原理與特點:DOM、SAX、PULL
轉自https://blog.csdn.net/tianhouquan/article/details/82467820 ,感謝作者的無私分享。 解析XML的幾種方式的原理與特點:DOM、SAX、PULL。 XML的解析方式有很多,光開源的就有十多種:如Xerces、J
android解析XML的三種方式 DOM、SAX、PULL
第一種DOM是全部解析出來,消耗記憶體空間 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
Android 隱士跳轉幾種方式
1、只有 配置 action 進行跳轉 <intent-filter> <action android:name="testarouter"></action> <category android:name="android.i
Android View 移動的幾種方式
layout() 如果你將滑動後的目標位置的座標傳遞給layout(),這樣子就會把view的位置給重新佈置了一下,在視覺上就是view的一個滑動的效果。 public class DragView extends View{ private int
Android-解析JSON資料(JSON物件/JSON陣列)
在上一篇部落格中,Android-封裝JSON資料(JSON物件/JSON陣列),講解到Android真實開發中更多的是去解析JSON資料(JSON物件/JSON陣列) 封裝JSON的資料是在伺服器端進行封裝了,Android更多的工作是解析(JSON物件/JSON陣列),所以Android
Android 更新UI的幾種方式
package lib.com.myapplication; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import androi
Android中IPC的幾種方式詳細分析與優缺點分析
Android程序間通訊(IPC:Inter-Process Communication)的幾種主要方式如下 1.使用Bundle ----> 用於android四大元件間的程序間通訊 android的四大元件都可使用Bundle傳遞資料 所以如果要實現四大元
Android非同步處理的幾種方式(附demo)
在Android的程式開發中,許多耗時操作都要放到子執行緒中,避免阻塞主執行緒,導致ANR。但是在使用非同步執行緒的過程中都會遇到與主執行緒通訊的問題。 在這裡先總體介紹幾種常見非同步處理的技術,以及他們的對應關係: Thread 使用Thread
Android 實現懸浮的幾種方式(一)AppBarLayout+PtrFrameLayout
先上個圖: 我所知道的有兩種實現方式: AppBarLayout巢狀控制滾動區實現(目前使用的) 給RecyclerView增加HeaderView顯示隱藏切換實現 先把引用的包放出來: compile 'com.android.su
java整合groovy的幾種方式對比
Groovy的幾種整合方式:groovyshell、GroovyClassLoader、GroovyScriptEngine,其中groovyshell的方式不支援指令碼快取,會導致垃圾回收頻繁
Android本地儲存的幾種方式
Android提供了多種選擇來儲存永久性的資料,根據不同的需求來使用不同的儲存方式,一般情況下,儲存資料的方式有下面幾種: SharedPreferences 內部儲存 外部儲存 SQLite 網路連線 下面主要來看一下前四種資料儲存方式。 Sha
Android 靜默安裝的幾種方式
/** * 執行具體的靜默安裝邏輯,需要手機ROOT。 * @param apkPath * 要安裝的apk檔案的路徑 * @return 安裝成功返回true,安裝失敗返回false。 */ public boolean install(String apkPath) {
asp讀取解析JSON的幾種方法
方法一(使用MSScriptControl.ScriptControl): <% Dim sc4Json,arr0,json InitScriptControl json="{""name"":""123"",""content"":[{""id"":""1""}
Android 實現View滑動幾種方式
關於View的滑動,Android中提供了許多方法,具體可以分為一下幾類: layout 在ACTION_MOVE中通過獲取x、y的偏移量動態佈局view,並禁止向父控制元件傳遞事件: @Override public boolean onTo
jquery ajax提交表單form資料幾種方式小結 a標籤提交,input標籤提交 submit提交
方式一:舉個例子。 <a href="javascript:void(0)" id="click">點選</a> //jq獲取標籤,並且繫結單擊事件 $(“#click”).click(function (){ //點選後