1. 程式人生 > >Android json資料的幾種方法

Android json資料的幾種方法

一、什麼是json

百度百科中對json的介紹是這樣的:JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的資料交換語言。易於人閱讀和編寫,同時也易於機器解析和生成(網路傳輸速度快)。在實際的開發中,我們通常使用json作為客戶端與服務端的資料交換格式,所以我們必須瞭解json資料的解析方法,這裡介紹三種解析json資料的方法,分別是Android系統自帶的json解析、Google提供的Gson解析、阿里巴巴的fastjson解析。

二、使用上面三種方式解析json資料

先看我們要解析的json資料是什麼樣子的:[javascript] view plain copy print?
  1. {  
  2.     "cityList": [  
  3.         {  
  4.             "id": 1,  
  5.             "name""武漢市"
  6.         },  
  7.         {  
  8.             "id": 2,  
  9.             "name""襄陽市"
  10.         },  
  11.         {  
  12.             "id": 3,  
  13.             "name""隨州市"
  14.         },  
  15.         {  
  16.             "id"
    : 4,  
  17.             "name""宜昌市"
  18.         }  
  19.     ],  
  20.     "id": 1,  
  21.     "name""湖北省"
  22. }  
{
    "cityList": [
        {
            "id": 1,
            "name": "武漢市"
        },
        {
            "id": 2,
            "name": "襄陽市"
        },
        {
            "id": 3,
            "name": "隨州市"
        },
        {
            "id": 4,
            "name": "宜昌市"
        }
    ],
    "id": 1,
    "name": "湖北省"
}
很簡單,就是一個省的資料,省中包括id、name、和市的集合,市中又包含了id和name屬性,下面我們就用三種方式來解析,直接上程式碼:[java] view plain copy print?
  1. package com.example.jsonparsetest;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import org.json.JSONArray;  
  5. import org.json.JSONObject;  
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.text.TextUtils;  
  9. import android.view.View;  
  10. import android.widget.TextView;  
  11. import com.example.jsonparsetest.bean.City;  
  12. import com.example.jsonparsetest.bean.Province;  
  13. import com.example.jsonparsetest.utils.FileUtils;  
  14. import com.google.gson.Gson;  
  15. publicclass MainActivity extends Activity {  
  16.     private TextView textView;  
  17.     @Override
  18.     publicvoid onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.activity_main);  
  21.         textView = (TextView) findViewById(R.id.content);  
  22.     }  
  23.     /**android自帶的JSON解析*/
  24.     publicvoid btn1Click(View view) {  
  25.         //從assets目錄中的province.txt檔案中獲取JSON字串
  26.         String json = FileUtils.getJSONStringFromFile(this);  
  27.         if(!TextUtils.isEmpty(json)){  
  28.             try {  
  29.                 //將JSON字串轉化為JSON物件
  30.                 JSONObject obj = new JSONObject(json);  
  31.                 Province province = new Province();  
  32.                 //通過opt...方法,獲取鍵對應的值
  33.                 province.setId(obj.optInt("id"));  
  34.                 province.setName(obj.optString("name"));  
  35.                 //得到一個JSON陣列,數組裡裝的city的JSON資料
  36.                 JSONArray arr = obj.optJSONArray("cityList");  
  37.                 if(arr != null && arr.length() > 0){  
  38.                     List<City> cityList = new ArrayList<City>();  
  39.                     //遍歷JSON陣列得到其中的city資料
  40.                     for(int i = 0; i < arr.length(); i++){  
  41.                         JSONObject jobj = arr.getJSONObject(i);  
  42.                         City city = new City();  
  43.                         city.setId(jobj.optInt("id"));  
  44.                         city.setName(jobj.optString("name"));  
  45.                         cityList.add(city);  
  46.                     }  
  47.                     province.setCityList(cityList);  
  48.                 }  
  49.                 //把Province物件轉化為String顯示出來,注意這裡的Province和City物件都必須複寫了toString方法
  50.                 textView.append("使用Android自帶的JSON解析,得出的結果為:\n" + province.toString());  
  51.                 textView.append("\n----------------\n");  
  52.             } catch (Exception e) {  
  53.                 e.printStackTrace();  
  54.             }  
  55.         }  
  56.     }  
  57.     /**Google的gson解析*/
  58.     publicvoid btn2Click(View view) {  
  59.         String json = FileUtils.getJSONStringFromFile(this);  
  60.         if(!TextUtils.isEmpty(json)){  
  61.             //新建一個Gson物件
  62.             Gson gson = new Gson();  
  63.             //fromJson方法可以把一個json字串直接轉化為對應的物件
  64.             Province province = gson.fromJson(json, Province.class);  
  65.             textView.append("使用Google的GSON解析,得出的結果為:\n" + province.toString());  
  66.             textView.append("\n----------------\n");  
  67.         }  
  68.     }  
  69.     /**阿里的fastjson解析*/
  70.     publicvoid btn3Click(View view) {  
  71.         String json = FileUtils.getJSONStringFromFile(this);  
  72.         if(!TextUtils.isEmpty(json)){  
  73.             //parseObject方法和上面的fromJson方法類似,也可以直接將一個json字串轉化為對應的物件
  74.             Province pro = com.alibaba.fastjson.JSON.parseObject(json, Province.class);  
  75.             textView.append("使用阿里的fastjson解析,得出的結果為:\n" + pro.toString());  
  76.             textView.append("\n----------------\n");  
  77.         }  
  78.     }  
  79. }  
package com.example.jsonparsetest;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;

import com.example.jsonparsetest.bean.City;
import com.example.jsonparsetest.bean.Province;
import com.example.jsonparsetest.utils.FileUtils;
import com.google.gson.Gson;

public class MainActivity extends Activity {
	private TextView textView;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		textView = (TextView) findViewById(R.id.content);
		
	}

	/**android自帶的JSON解析*/
	public void btn1Click(View view) {
		//從assets目錄中的province.txt檔案中獲取JSON字串
		String json = FileUtils.getJSONStringFromFile(this);
		if(!TextUtils.isEmpty(json)){
			try {
				//將JSON字串轉化為JSON物件
				JSONObject obj = new JSONObject(json);
				Province province = new Province();
				//通過opt...方法,獲取鍵對應的值
				province.setId(obj.optInt("id"));
				province.setName(obj.optString("name"));
				//得到一個JSON陣列,數組裡裝的city的JSON資料
				JSONArray arr = obj.optJSONArray("cityList");
				if(arr != null && arr.length() > 0){
					List<City> cityList = new ArrayList<City>();
					//遍歷JSON陣列得到其中的city資料
					for(int i = 0; i < arr.length(); i++){
						JSONObject jobj = arr.getJSONObject(i);
						City city = new City();
						city.setId(jobj.optInt("id"));
						city.setName(jobj.optString("name"));
						cityList.add(city);
					}
					province.setCityList(cityList);
				}
				//把Province物件轉化為String顯示出來,注意這裡的Province和City物件都必須複寫了toString方法
				textView.append("使用Android自帶的JSON解析,得出的結果為:\n" + province.toString());
				textView.append("\n----------------\n");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**Google的gson解析*/
	public void btn2Click(View view) {
		String json = FileUtils.getJSONStringFromFile(this);
		if(!TextUtils.isEmpty(json)){
			//新建一個Gson物件
			Gson gson = new Gson();
			//fromJson方法可以把一個json字串直接轉化為對應的物件
			Province province = gson.fromJson(json, Province.class);
			textView.append("使用Google的GSON解析,得出的結果為:\n" + province.toString());
			textView.append("\n----------------\n");
		}
	}

	/**阿里的fastjson解析*/
	public void btn3Click(View view) {
		String json = FileUtils.getJSONStringFromFile(this);
		if(!TextUtils.isEmpty(json)){
			//parseObject方法和上面的fromJson方法類似,也可以直接將一個json字串轉化為對應的物件
			Province pro = com.alibaba.fastjson.JSON.parseObject(json, Province.class);
			textView.append("使用阿里的fastjson解析,得出的結果為:\n" + pro.toString());
			textView.append("\n----------------\n");
		}
	}

}

執行時截圖如下:

相關推薦

$.ajax()方法從伺服器獲取json資料方式詳解

一.什麼是json json是一種取代xml的資料結構,和xml相比,它更小巧但描述能力卻很強,網路傳輸資料使用流量更少,速度更快。 json就是一串字串,使用下面的符號標註。 {鍵值對} : json物件 [{},{},{}] :json陣列 "" :雙引號內是屬性或值

Android解析JSON資料方式對比

Json介紹 Json(JavaScript Object Natotion)是一種輕量級的資料交換格式,具有良好的可讀性和便於快速編寫的特性,主要用於傳送資料。Json是一種取代Xml的資料結構,相比於xml更小巧,從而減少資料傳輸流量和佔用的頻寬。 Json語法 {

關於兩個伺服器資料庫之間的資料方法實踐

以前資料庫和環境相關的都是開發之前都是開發LEADER 搞定了,今天自己搞本地資料庫做測試,由於表比較多,資料比較多, 所以在用了很多種資料同步的方法,現在總結下下面幾種方法的感受 1.通過轉儲SQL 檔案,通過轉儲表結構和資料SQL 檔案的方式 ,然後匯入到本地的資料庫    缺點:

asp讀取解析JSON方法

方法一(使用MSScriptControl.ScriptControl): <% Dim sc4Json,arr0,json InitScriptControl json="{""name"":""123"",""content"":[{""id"":""1""}

js字串轉json方法

1,eval方式解析,恐怕這是最早的解析方式了。如下: 複製程式碼 程式碼如下: function strToJson(str){ var json = eval(‘(’ + str + ‘)’); return json; } 記得別忘了str兩旁的小括號。 2,new Fu

在 springmvc 中配置 json方法

配置方法一 **1、匯入第三方的jackson包,jackson-mapper-asl-1.9.7.jar和jackson-core-asl-1.9.7.jar。  2、spring配置檔案新增

拼接json資料2方法

//後端只要用ajax的方式去接收好了 引數 String 接收就好了 //我們自己用java 的方法去解析josn資料就好了 //java 部分 //獲取java 解析json物件(如果傳來的是陣列

Android中生成json格式資料方法

String生成的json資料有兩種 1 String json="[{'name':'tom','age':12},{'name':'jack','age':13}]"; JSONArray a

Android json資料方法

一、什麼是json百度百科中對json的介紹是這樣的:JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子

學習筆記:AndroidJSON解析的方法

一、解析方法:  Android解析json有很多種方法,下面介紹三種方法:Android自帶的org.json解析、Gson解析和Jackson解析。 優缺點對比:  Android自帶的方法有點像xml的dom解析,遍歷之後根據需要的key值去取資

【VBA研究】解析JSON資料方法

iamlaosong文 網抓資料或者通過介面接收資料時,發來的資料很多是JSON格式,這是JavaScript常用的一種資料結構。對這種資料如何解析呢?先假定發來的資料如下,並針對這個資料給出幾種解析

將HTML5封裝成android應用APK文件的方法

android作為下一代的網頁語言,HTML5擁有很多讓人期待已久的新特性。HTML5的優勢之一在於能夠實現跨平臺遊戲編碼移植,現在已經有很多公司在移動 設備上使用HTML5技術。隨著HTML5跨平臺支持的不斷增強和智能手機的迅速普,HTML5技術有著非常好的發展前景,甚至有人預言HTML5將引燃 移動平臺遊

Android 將HTML5封裝成android應用APK文件的方法

顯示 import 網站 結束 name 很快 idm log 詳細 越來越多的開發者熱衷於使用html5+JavaScript開發移動Web App。不過,HTML5 Web APP的出現能否在未來取代移動應用,就目前來說,還是個未知數。一方面,用戶在使用習慣上,不喜歡在

Appium Android 獲取包名和 Activity 的方法 (轉)

androidm test class .com mps 文件 ren -s tle 本文檔主要記錄“獲取包名和 Activity 的方法”,用於自動化測試時啟動APP。以下方法主要來源於網絡和社區同學的貢獻,特此感謝! 1. 方法一: pm list package查看包

html5 如何打包成apk,將H5封裝成android應用APK文件的方法

pro 高手 closed 免費 lan 快速 沒有 能夠 keycode 直接使用編程軟件提供的方法: 1、需要下載安裝MyEclipse2014,Android SDK,eclipse(需配置Android開發環境) Java和Android環境安裝與配置。 2、打開M

Android去掉標題欄的方法

1、直接在重寫的onCreate方法中說明 注意: this.requestWindowFeature(Window.FEATURE_NO_TITLE); 需要在setContentView(R.layout.activity_main);這一句上面。 2、在Andro

Android中Intent傳值的方法

1.使用putextra    Intent intent = new Intent(); intent.putExtra("test","asdf"); intent.se

Android Studio 中 處理 Gradle 依賴的方法的介紹

exclude exclude : 剔除依賴中的某個模組 例: // 根據組織名 + 構建名剔除 //recyclerview 不想要依賴 com.android.support:support-annotations:26.1.0,就可以這麼做 implementation

Python中遍歷pandas資料方法介紹和效率對比說明

前言 Pandas是python的一個數據分析包,提供了大量的快速便捷處理資料的函式和方法。其中Pandas定義了Series 和 DataFrame兩種資料型別,這使資料操作變得更簡單。Series 是一種一維的資料結構,類似於將列表資料值與索引值相結合。DataFrame 是一種二維

NLP之TFTS讀入資料:TF之TFTS讀入時間序列資料方法

NLP之TFTS讀入資料:TF之TFTS讀入時間序列資料的幾種方法 T1、從Numpy 陣列中讀入時間序列資料 1、設計思路 2、輸出結果 {'times': array([ 0, 1, 2, 3, 4, 5, 6, 7, 8,