1. 程式人生 > >Android解析JSON資料幾種方式對比

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字串的方法。

    /**
     * 將物件轉換成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;
    }
org.json包提供了5個類,分別為JSONArray,JSONObject,JSONStringer,JSONTokener和JSONException。

JSONException異常類

JSONStringer有序構造

JSONObject無序構造

JSONArray                   陣列物件

JSONStringer傳入的鍵值對是有序的,JSONObject傳入的鍵值對是無序的,一般情況下使用JSONObject即可,但對於一些巢狀的Json以及一些JSONArray沒有key只有value的情況,則使用JSONStringer。

使用類庫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>
類似Gson的json庫常用的有Gson外還有Jackson和FastJson,對於這三個效能的對比網上眾說紛紜,當然這跟他們實現的程式碼有很大的關係,不過個人測試後發現Jackson和FastJson的序列化和反序列化效能相當。Gson效能相比弱一些,但是很穩定。

相關推薦

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 (){ //點選後