1. 程式人生 > >android手動解析json

android手動解析json

一、什麼是JSON?

JSON是一種取代XML的資料結構,和xml相比,它更小巧但描述能力卻不差,由於它的小巧所以網路傳輸資料將減少更多流量從而加快速度。

JSON就是一串字串 只不過元素會使用特定的符號標註。

{} 雙括號表示物件

[] 中括號表示陣列

"" 雙引號內是屬性或值

: 冒號表示後者是前者的值(這個值可以是字串、數字、也可以是另一個數組或物件)

所以 {"name": "Michael"} 可以理解為是一個包含name為Michael的物件

而[{"name": "Michael"},{"name": "Jerry"}]就表示包含兩個物件的陣列

當然了,你也可以使用{"name":["Michael","Jerry"]}來簡化上面一部,這是一個擁有一個name陣列的物件

二、JSON解析之傳統的JSON解析

1、生成JSOn字串

public static String createJsonString(String key, Object value) {
		JSONObject jsonObject = new JSONObject();
		jsonObject.put(key, value);
		return jsonObject.toString();
	}

2、解析JSON字串

分為以下三種情況,一個JavaBean,一個List陣列,一個巢狀Map的List陣列:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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

import com.android.myjson.domain.Person;

/**
 * 完成對json資料的解析
 * 
 */
public class JsonTools {


	public static Person getPerson(String key, String jsonString) {
		Person person = new Person();
		try {
			JSONObject jsonObject = new JSONObject(jsonString);
			JSONObject personObject = jsonObject.getJSONObject("person");
			person.setId(personObject.getInt("id"));
			person.setName(personObject.getString("name"));
			person.setAddress(personObject.getString("address"));
		} catch (Exception e) {
			// TODO: handle exception
		}
		return person;
	}

	public static List getPersons(String key, String jsonString) {
		List list = new ArrayList();
		try {
			JSONObject jsonObject = new JSONObject(jsonString);
			// 返回json的陣列
			JSONArray jsonArray = jsonObject.getJSONArray(key);
			for (int i = 0; i < jsonArray.length(); i++) {
				JSONObject jsonObject2 = jsonArray.getJSONObject(i);
				Person person = new Person();
				person.setId(jsonObject2.getInt("id"));
				person.setName(jsonObject2.getString("name"));
				person.setAddress(jsonObject2.getString("address"));
				list.add(person);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}

	public static List getList(String key, String jsonString) {
		List list = new ArrayList();
		try {
			JSONObject jsonObject = new JSONObject(jsonString);
			JSONArray jsonArray = jsonObject.getJSONArray(key);
			for (int i = 0; i < jsonArray.length(); i++) {
				String msg = jsonArray.getString(i);
				list.add(msg);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}

	public static List> listKeyMaps(String key,
			String jsonString) {
		List> list = new ArrayList>();
		try {
			JSONObject jsonObject = new JSONObject(jsonString);
			JSONArray jsonArray = jsonObject.getJSONArray(key);
			for (int i = 0; i < jsonArray.length(); i++) {
				JSONObject jsonObject2 = jsonArray.getJSONObject(i);
				Map map = new HashMap();
				Iterator iterator = jsonObject2.keys();
				while (iterator.hasNext()) {
					String json_key = iterator.next();
					Object json_value = jsonObject2.get(json_key);
					if (json_value == null) {
						json_value = "";
					}
					map.put(json_key, json_value);
				}
				list.add(map);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}
}

三、JSON解析之GSON

1、生成JSON字串

import com.google.gson.Gson;

public class JsonUtils {

	public static String createJsonObject(Object obj) {
		Gson gson = new Gson();
		String str = gson.toJson(obj);
		return str;

	}
}

二、解析JSON

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

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

;
public class GsonTools {

	public GsonTools() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param 
	 * @param jsonString
	 * @param cls
	 * @return
	 */
	public static  T getPerson(String jsonString, Class cls) {
		T t = null;
		try {
			Gson gson = new Gson();
			t = gson.fromJson(jsonString, cls);
		} catch (Exception e) {
			// TODO: handle exception
		}
		return t;
	}

	/**
	 * 使用Gson進行解析 List
	 * 
	 * @param 
	 * @param jsonString
	 * @param cls
	 * @return
	 */
	public static  List getPersons(String jsonString, Class cls) {
		List list = new ArrayList();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString, new TypeToken>() {
			}.getType());
		} catch (Exception e) {
		}
		return list;
	}

	/**
	 * @param jsonString
	 * @return
	 */
	public static List getList(String jsonString) {
		List list = new ArrayList();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString, new TypeToken>() {
			}.getType());
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}

	public static List> listKeyMaps(String jsonString) {
		List> list = new ArrayList>();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString,
					new TypeToken>>() {
					}.getType());
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}
}


三、JSON解析之FastJSON

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

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

public class JsonTool {

	public static  T getPerson(String jsonstring, Class cls) {
		T t = null;
		try {
			t = JSON.parseObject(jsonstring, cls);
		} catch (Exception e) {
			// TODO: handle exception
		}
		return t;
	}

	public static  List getPersonList(String jsonstring, Class cls) {
		List list = new ArrayList();
		try {
			list = JSON.parseArray(jsonstring, cls);
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}

	public static  List> getPersonListMap1(
			String jsonstring) {
		List> list = new ArrayList>();
		try {
			list = JSON.parseObject(jsonstring,
					new TypeReference>>() {
					}.getType());

		} catch (Exception e) {
			// TODO: handle exception
		}

		return list;
	}
}

總結:

JSON對於移動裝置來說,尤其對於網路環境較差和流量限制的情況下,相對於XML格式的資料傳輸會更節省流量,傳輸效率更高。在這三種解析方式中FastJson是效率最高的,推薦使用。

相關推薦

android手動解析json

一、什麼是JSON? JSON是一種取代XML的資料結構,和xml相比,它更小巧但描述能力卻不差,由於它的小巧所以網路傳輸資料將減少更多流量從而加快速度。 JSON就是一串字串 只不過元素會使用特定的符號標註。 {} 雙括號表示物件 [] 中括號表示陣列 "" 雙引號內是屬

Android Gson解析json工具類封裝

pac spa google lis object sonar andro on() div package com.springSecurity.gson; import java.util.ArrayList; import java.util.List

android 快速解析json資料搭配Gson庫中Android Studio外掛 GsonFormat

轉:https://www.jianshu.com/p/d34c5e7c8227 更簡潔的文章:http://www.cnblogs.com/foxy/p/7825380.html 如果對json解析資料還不清楚的可以看一下我的例子:ExpandableListView+SQLite+Jso

Android解析Json陣列

在ListView顯示資料庫裡所有資料的時候,因為資料庫的資料是一條一條的記錄,在後臺返回的時候,我們往往是返回Json陣列的形式,把每一條資料當作是一個數組元素儲存起來。 先看下我們準備的Json陣列: [{ "id": "37", "bianhao": "201872986329

android Gson解析JSON資料中動態未知欄位key的方法

有時在解析json資料中的欄位key是動態可變的時候,由於Gson是使用靜態註解的方式來設定實體物件的,因此我們很難直接對返回的型別來判斷。但Gson在解析過程中如果不知道解析的欄位,就會將所有變數儲存在一個Map中,我們只要例項化這個map就能動態地取出key和value了。先給出一段js

Android-Gson解析JSON資料(JSON物件/JSON陣列)

上一篇部落格,Android-解析JSON資料(JSON物件/JSON陣列),介紹了使用 org.json.JSONArray;/org.json.JSONObject; 來解析JSON資料;   Google Android 還提供來另外一種方式來解析JSON資料,那就是Gson;

Android Gson解析Json(常規使用)

gson是一個java庫,用作java物件和json表示式之間的轉換。gson可以處理任何Java物件,包括已經存在的、你沒有原始碼的物件。gson有很多的優勢,比如它強大的功能:1.反序列化25M以上的字串沒有任何問題。2.它可以序列化一個有140萬個物件的集合,3.反序

Android解析json資料的三種方式

Json簡介 JAVAScript Object Notation是一種輕量級的資料交換格式 具有良好的可讀和便於快速編寫的特性。 業內主流技術為其提供了完整的解決方案(有點類似於正則表示式 ,獲得了

android 資料解析 JSON 開發詳解+視訊

什麼是json: JSON即JavaScript Object Natation的簡稱,它是一種輕量級的資料交換格式,非常適合伺服器與JavaScript的互動。JSON易於人閱讀和編寫。同時也易於

Java 手動解析Json資料小記

public static void main(String[] args) throws JSONException { String json = "{status:2,result:[

android json解析詳解(json手動解析

一 .json簡介 1)概念:json全稱是javaScript object Notation,是一種病輕量級的資料交換格式。 2)特點: 1.本質就是具有特定格式的字串 2,.json完全獨立於程式語言 3.json比xml資料傳輸的有效性要高出很多 二。json資料

android 訪問web端與解析json,模擬用戶登錄

android用戶登錄 與解析json數據 之前寫過一個java web端的登錄驗證,最後返回一個json字符串。字符串格式如下:{"appmsg":"賬號或密碼錯誤","appcode":0,"_default_boolean_a":false}今天就結合著Android來寫一個簡單的登錄。註意:

Android以JSONOject和GSON兩種方式解析json

length pre ray oid 字符 CA clas img name json文件如下: 將獲取到的json數據轉化為String形式 OkHttpClient client = new OkHttpClient(); R

【我的Android進階之旅】關於解析json資料中自帶轉義符號的正確操作

一、問題描述 在實現一個功能的時候,需要伺服器以json格式返回一段功能配置,比如如下所示的json配置。 1.1 我希望的json格式 { "k": "ClientFilterTrace_android", "isVisible": true

Android 整合okhttp3、listview解析json資料

上上篇文章寫了個Android的模擬介面,終於派上用場了 現在我們將接口裡面的json資料通過ListView顯示出來,效果如下: 先講一下ListView吧, 講ListView之前,肯定要講Adapter,在Android應用程式中,採用資料和顯示分開實現的資料處理方式,由於資料來

Android-解析JSON資料(JSON物件/JSON陣列)

在上一篇部落格中,Android-封裝JSON資料(JSON物件/JSON陣列),講解到Android真實開發中更多的是去解析JSON資料(JSON物件/JSON陣列)   封裝JSON的資料是在伺服器端進行封裝了,Android更多的工作是解析(JSON物件/JSON陣列),所以Android

Json轉換利器Gson之-實際開發中的特殊需求處理(手動解析-TypeToken處理)

處理方法: 1,先將介面返回的JSON,用gson.tojson(map)方法,將LinkedTreeMap物件轉成String。 2,再通過gson.fromjson(string,type)方法,將String轉成LinkedTreeMap。用到了Type type=

Xamarin.Android下獲取與解析JSON

一、新建專案 1.新建一個Android專案,並命名為為NetJsonList 2.右擊引用,選擇新增引用,引用System.Json.dll 二、同步請求 既然是跨平臺,我們自然不能按照java下的方式進行編寫,否則如何跨平臺呢,所以我們需要使用Syste.Net名稱空間下的兩個類:

Android之使用GSON解析JSON資料

GSON簡介: GSON是Google提供的用來在Java物件和JSON資料之間進行對映的Java類庫。GSON可以很容易的將一串JSON資料轉換為一個Java物件,或是將 一個Java物件轉換為相應的JSON資料。 使用GSON解析JSON資料的基本

android開發之 Gson 解析json陣列

為了紀念兩天解決的一個問題。 剛剛接觸到android的volley 框架,使用jsonarrayrequest的時候,得到jsonarray 問高手說可以用Gson 來解析於是開始了兩天的鑽研之路。 首先我的資料是這樣的 然後,你需要自己寫一個類,對應後臺資料的一個