1. 程式人生 > >Gson 解析複雜json字串

Gson 解析複雜json字串

    對Gson不瞭解的同學可以先去了解下Gson的基本用法

需要解析的Json字串如下: {"data":{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","indexId":"02","provinceName":"江蘇省"}]},"result":"ok"}

先貼上解析json字串的程式碼:

public ResponseData<Province_net> providerNetProviceListData(String result) {
		ResponseData<Province_net> responseData = new ResponseData<Province_net>();
		ResponseEntity<Province_net> responseEntity = new ResponseEntity<Province_net>();
		Gson gson = new Gson();
		BaseNetData<BaseNetProvincesList<Province_net>> baseNetData = gson.fromJson(
				result,
				new TypeToken<BaseNetData<BaseNetProvincesList<Province_net>>>() {
				}.getType());
		
		String resultCode = baseNetData.getResult();

		if (null != resultCode && !TextUtils.isEmpty(resultCode)) {
			if (resultCode.equalsIgnoreCase("ok")) {
				responseData.setStatusCode(ResponseData.STATUS_CODE_SUCCESS);
				responseEntity.setSuccessList(baseNetData.getData().getData());

				responseData.setResponseEntity(responseEntity);
			}
			// redscs
			else if (resultCode.equals("NO_DATA")) {
				responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
				responseEntity.setFailureMsg("沒有資料");
				responseData.setResponseEntity(responseEntity);
			} else if (resultCode.equalsIgnoreCase("EXCEPTION")) {
				responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
				responseEntity.setFailureMsg("伺服器端異常");
				responseData.setResponseEntity(responseEntity);
			} else if (resultCode.equalsIgnoreCase(INVALID_TOKEN)) {
				responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
				responseEntity.setFailureMsg(INVALID_TOKEN);
				responseData.setResponseEntity(responseEntity);
			} else {
				responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
				responseEntity.setFailureMsg("未知錯誤");
				responseData.setResponseEntity(responseEntity);
			}
		} else {
			responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
			responseEntity.setFailureMsg("獲取資料異常");
			responseData.setResponseEntity(responseEntity);
		}
		return responseData;
	}

首先我們定義了一個數據bean用來裝載Gson解析出來的資料:

public class ResponseData<T> {

	public static final int STATUS_CODE_SUCCESS = STATUS_CODE_BEGIN + 1;
	public static final int STATUS_CODE_FAILURE = STATUS_CODE_BEGIN + 2;

	private int statusCode;
	private ResponseEntity<T> responseEntity;

	public int getStatusCode() {
		return statusCode;
	}

	public void setStatusCode(int statusCode) {
		this.statusCode = statusCode;
	}

	public ResponseEntity<T> getResponseEntity() {
		return responseEntity;
	}

	public void setResponseEntity(ResponseEntity<T> responseEntity) {
		this.responseEntity = responseEntity;
	}
}

此類將所有的返回分成返回碼statusCode和返回的實體responseEntity兩個部分。

然後定義了一個針對上述基本bean的實體的bean,

public class ResponseEntity<T> {

	private String failureMsg;
	private T successEntity;
	private int totalCount;
	private List<T> successList;

	public String getFailureMsg() {
		return failureMsg;
	}

	public void setFailureMsg(String failureMsg) {
		this.failureMsg = failureMsg;
	}

	public T getSuccessEntity() {
		return successEntity;
	}

	public void setSuccessEntity(T successEntity) {
		this.successEntity = successEntity;
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public List<T> getSuccessList() {
		return successList;
	}

	public void setSuccessList(List<T> successList) {
		this.successList = successList;
	}

}

  這個bean中有四個屬性,分別為:當返回的資料格式為json物件的時候的successEntity ,錯誤資訊failureMsg,返回資料格式為jsonArray的successList 以及jsonArray的長度。

 下面針對具體的返回定義了一個基礎Bean:

public class BaseNetData<T> {

	private String result;
	private T data;

	public String getResult() {
		return result;
	}

	public T getData() {
		return data;
	}

	public void setResult(String result) {
		this.result = result;
	}

	public void setData(T data) {
		this.data = data;
	}

}


針對{"data":{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","indexId":"02","provinceName":"江蘇省"}]},"result":"ok"}   。  此類中的result屬性對應json字串中的“result”, data對應著“data” 。(一定保證欄位名字的一致)。

然後對於{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","indexId":"02","provinceName":"江蘇省"}]} ,使用如下:

public class BaseNetListData<T> {

	private int total;
	private List<T> data;

	public int getTotal() {
		return total;
	}

	public List<T> getData() {
		return data;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	public void setData(List<T> data) {
		this.data = data;
	}

}

如果返回不是jsonArray而是jsonObject,則

public class BaseNetEntityData<T> {
	
	private T data;

	public T getData() {
		return data;
	}

	public void setData(T data) {
		this.data = data;
	}

}

       通過以上的封裝我們可以根據伺服器的返回型別來調整自己的資料bean,從而實現程式碼的複用。。。。。。

相關推薦

Gson 解析複雜json字串

    對Gson不瞭解的同學可以先去了解下Gson的基本用法 需要解析的Json字串如下: {"data":{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","index

Gson解析複雜JSON字串的兩種方式

JSONObject(源自Android官方)、 Gson(源自Google)、 Jackson(第三方開源庫)、 FastJSON(第三方開源庫)、 本文例子使用Google提供的Gson。 什麼是JavaBean JavaBean實際上是一種特殊的Java類,是一種規範,經常用於封裝資料。Ja

python解析複雜json字串

  因為專案需要,公司領導對提出了介面測試的要求,因此作為一個測試人員,我第一時間就想到了jmeter這個利器,前面文章也有說明過怎麼用jmeter做http協議的介面測試,這裡我不再做講解,此篇主要講解如何用python做介面測試,並解析返回結果。 (注意:介面的返回格式是json格式) 一、pytho

Gson解析複雜Json資料

implementation'com.google.code.gson:gson:2.8.0' 然後根據api獲取到的json資料 { "status": "1", "info": "OK", "infocode": "10000",

通過GSON解析複雜json資料(二)

這裡我們依舊用上文中的 json 字串 , 由於轉換為 map 依舊需要 javaBean , 所有我們的實體物件也不發生改變 這裡我們需要活用 java 反射和型別對比實現需求 先看程式碼 package com.jacx.test.test01.

java使用jackson解析複雜json字串

為什麼要用 jackson jackson 憑藉其簡潔的語法、高效的處理速度、豐富的功能、清晰的文件等眾多優勢,受到廣大開發者的熱愛,成為了java程式設計師處理json資料的不二選擇。 1 實戰需求 在電商專案中,訂單物流查詢模組,需要接入多方快遞 API

Gson解析複雜Json字串

前提:自行將Gson開源庫匯入到工程中(不會的,請自行百度)。 這是本人第一次寫部落格,如有錯誤,請您見諒,也歡迎與我交流! 需要解析的Json字串為: { "error_code": 0, "reason"

使用Gson解析複雜json資料

我們app介面資料返回通常是以下格式: {“code”:“0000”,“data”: {“code”:“0002”,“resultData”:null,“resultMsg”:“使用者Token過期,請重新登入”,“error”:[],“msg”:""} 把以上的json資料放線上J

GSON解析複雜JSON陣列

1.GSON的兩個重要方法   在GSON的API中,提供了兩個重要的方法:toJson()和fromJson()方法。其中,toJson()方法用來實現將Java物件轉換為相應的JSON資料,fromJson()方法則用來實現將JSON資料轉換為相應的Jav

使用Gson解析複雜json陣列

前端使用Ajax傳值到後端 程式碼示例如下: var postData = []; var json1 = {"a":"a","b":"b"}; var jsonArray = [{"id":"a","name":"zrxJuly"},{"id":"b","name":"Anna

Android:使用Gson解析複雜JSON資料

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,目前廣泛使用。本文主要講解android如何解析複雜格式的JSON資料,適合android初學者和初步接觸JSON的人。 1.JSON相關介紹: 首先了解一下JSO

使用GSON解析複雜JSON資料(有DEMO)

              Gson(又稱Google Gson)是Google公司釋出的一個開放原始碼的Java庫,使用它我們可以很方便的解析JSON資料,把JSON據輸出填充到對應得物件內,然後通過物件去呼叫我們解析到的資料。               例如我們要

使用GSON解析複雜資料——天氣資訊

最近在做自己的App時,要在主介面上新增簡單的天氣資訊顯示,然後就理所當然的跑到百度查詢如何才能獲取到天氣資訊,最後決定採用第三方天氣資訊服務商提供的資料,在看第三方提供的API說明時發現,獲取到的天氣資料是Json格式的,需要自己解析。又是經過一番百度,最後確定使用Google

Android Retrofit2框架的使用,以及解析複雜Json(其實也不算太複雜

  Retrofit是Square公司的開源專案,是基於OKHttp進行的應用層封裝 Retrofit官方文件:http://square.github.io/retrofit/ Retrofit GitHub地址:https://github.com/square/retro

java解析複雜json資料

java如何解析複雜的json資料 關於json處理的包有好幾個,比如jackson、Gson、Fastjson。Gson是谷歌做的,功能強大;Fastjson是阿里巴巴做的,效能更快。具體用哪個,開心就好。我這裡兩個都沒用,用的是java的一個類庫—json-

java解析複雜json:JSONObject 和 JSONArray的使用

在正式解析之前,我們需要下載解析Json所需要的jar包,一共有7個。下載地址如下:https://download.csdn.net/download/zai_xia/10374080大家也可以自行找資源下載。然後將這些Jar包 Build Path 進專案就好了。特別注意

java遍歷複雜json字串獲取想要的資料

https://blog.csdn.net/qq_34309663/article/details/80508125     java如何解析複雜的json資料關於json處理的包有好幾個,比如jackson、Gson、Fastjson。Gson是谷歌做的,功能強大;Fastjson

使用Gson解析複雜的泛型巢狀泛型資料結構

一、Gson Gson是由Google自家出來的Json解析庫,使用起來相容性方面當然會有很多優勢,而且解析Json資料也很方便,掌握了Gson的一些基本使用之後就可以使用它解析很多複雜的Json資料了。但當我們要解析一個複雜的資料結構時,比如說List<

3、解析複雜Json進階

場景一 沒有頭的Json陣列 “e:/person”檔案內容如下,檔案中是沒有頭的json陣列 [ { "id" : 1, "name" : "lzj", "age" : 27 },

JAVA-使用FastJson解析複雜JSON資料

FastJson解析JSON的核心就是把json資料直接轉換成物件,讓解析複雜的json資料變得非常簡單,較大的降低了出錯的可能性。 使用方法: 1.建立JSON資料物件,所有的json鍵值都使用key作為變數名,並且實現set,get函式。 下面試簡單的demo測試複雜的