java用gson解析json(gson自定義解析規則)

本文目錄一覽:

java中使用gson解析json的問題

首先我不明白所報的錯是什麼錯,如果是跟ORM框架有關的那就是懶載入造成的。

一般來說對象轉json不那麼容易拋錯的,只有json轉對象出錯較高,你要注意的是你的對象屬性是否有標準的getter和setter方法。

如何統一解析JSON數據,使用Gson結合泛型類

public class JsonRootBean {

private String code;

private Data data;

private ListString error;

private String msg;

public void setCode(String code) {

this.code = code;

}

public String getCode() {

return code;

}

public void setData(Data data) {

this.data = data;

}

public Data getData() {

return data;

}

public void setError(ListString error) {

this.error = error;

}

public ListString getError() {

return error;

}

public void setMsg(String msg) {

this.msg = msg;

}

public String getMsg() {

return msg;

}

}

我們知道,所有的介面返回的數據格式都是一樣的,就拿上面的返回結果來說吧,返回的Json字元串中只是”data”: {“code”:”0002″,”resultData”:null,”resultMsg”:”用戶Token過期,請重新登入”},這個

data中的「resultData」中的返回數據不一樣,其他數據格式都是一樣的,所以我們這裡使用泛型Java實體類,一次解析全部搞定!

把上面的Java實體類中的 Data成員變數改為:

[html] view plain copy

public class JsonRootBeanT {

private DataT data;

public DataT getData() {

return data;

}

public void setData(DataT data) {

this.data = data;

}

}

而其中的Data類為:

[html] view plain copy

public class DataT {

private String code;

private T resultData;

private String resultMsg;

public String getCode() {

return code;

}

public void setCode(String code) {

this.code = code;

}

public T getResultData() {

return resultData;

}

public void setResultData(T resultData) {

this.resultData = resultData;

}

public String getResultMsg() {

return resultMsg;

}

public void setResultMsg(String resultMsg) {

this.resultMsg = resultMsg;

}

}

那我們在解析的時候,對返回的Json串,作如下處理:

1、如果返回的字元串resultData直接為 {「對象」},處理如下:

Type jsonType = new TypeTokenJsonRootBeanTripResultData() {}.getType();

JsonRootBeanTripResultData rootBean = new Gson().fromJson(jsonStr, jsonType);

然後根據 rootBean的get方法,依次獲取相應的data值 ,然後根據泛型 T 為TripResultData的具體實體類來獲取具體的數據;

2、如果返回的字元串resultData直接為數組 [{「對象」}],處理如下:

Type jsonType = new TypeTokenJsonRootBeanTripResultData() {}.getType();

JsonRootBeanListTripResultData rootBean = new Gson().fromJson(jsonStr, jsonType); 其實實體類泛型寫在列表裡面 ListT;

其實這個時候,所有的數據都已經解析到這個 rootBean裡面了,你就可以自己根據自己寫的的方法獲取。

如何通過gson解析存儲的json數組字元串

引入gson-1.4.jar,(挺蛋疼的,不想自己研究這玩意,尋思網上直接找現成的Demo,結果沒有我想要的東西)

Gson中重要的幾個核心類:

Gson、JsonParser、JsonObject、JsonArray。

下面演示這兩個類之間的轉換過程:

import Java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import com.google.gson.Gson;

import com.google.gson.JsonArray;

import com.google.gson.JsonElement;

import com.google.gson.JsonObject;

import com.google.gson.JsonParser;

public class GsonTest {

public static void main(String[] args) {

Map map = new HashMap();

map.put(“name”, “nam1”);

map.put(“age”, “12”);

List list = new ArrayList();

list.add(“name”);

list.add(“123”);

list.add(map);

//json格式的字元串

String str = “[{‘name’:’kevin’,’age’:25},{‘name’:’cissy’,’age’:24}]”;

//創建一個Gson對象

Gson gson = new Gson();

//把java對象轉換成Json字元串。

String jsonStr = gson.toJson(map);

System.out.println(jsonStr);

//把集合對象轉換成Json字元串

jsonStr = gson.toJson(list);

System.out.println(jsonStr);

//創建一個JsonParser

JsonParser parser = new JsonParser();

//通過JsonParser對象可以把json格式的字元串解析成一個JsonElement對象

JsonElement el = parser.parse(str);

//把JsonElement對象轉換成JsonObject

JsonObject jsonObj = null;

if(el.isJsonObject()){

jsonObj = el.getAsJsonObject();

}

//把JsonElement對象轉換成JsonArray

JsonArray jsonArray = null;

if(el.isJsonArray()){

jsonArray = el.getAsJsonArray();

}

//遍歷JsonArray對象

MyField field = null;

Iterator it = jsonArray.iterator();

while(it.hasNext()){

JsonElement e = (JsonElement)it.next();

//JsonElement轉換為JavaBean對象

field = gson.fromJson(e, MyField.class);

System.out.println(field.getName()+” === “+field.getAge());

}

}

}

class MyField {

private String name;

private Integer age;

public MyField() {

}

public MyField(String name, Integer age) {

super();

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

}

Java解析json數據

一、 JSON (JavaScript Object Notation)一種簡單的數據格式,比xml更輕巧。

Json建構於兩種結構:

1、「名稱/值」對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。 如:

{

「name」:」jackson」,

「age」:100

}

2、值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)如:

{

「students」:

[

{「name」:」jackson」,「age」:100},

{「name」:」michael」,」age」:51}

]

}

二、java解析JSON步驟

A、伺服器端將數據轉換成json字元串

首先、伺服器端項目要導入json的jar包和json所依賴的jar包至builtPath路徑下(這些可以到JSON-lib官網下載:)

然後將數據轉為json字元串,核心函數是:

public static String createJsonString(String key, Object value)

{

JSONObject jsonObject = new JSONObject();

jsonObject.put(key, value);

return jsonObject.toString();

}

B、客戶端將json字元串轉換為相應的javaBean

1、客戶端獲取json字元串(因為android項目中已經集成了json的jar包所以這裡無需導入)

public class HttpUtil

{

public static String getJsonContent(String urlStr)

{

try

{// 獲取HttpURLConnection連接對象

URL url = new URL(urlStr);

HttpURLConnection httpConn = (HttpURLConnection) url

.openConnection();

// 設置連接屬性

httpConn.setConnectTimeout(3000);

httpConn.setDoInput(true);

httpConn.setRequestMethod(“GET”);

// 獲取相應碼

int respCode = httpConn.getResponseCode();

if (respCode == 200)

{

return ConvertStream2Json(httpConn.getInputStream());

}

}

catch (MalformedURLException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

return “”;

}

private static String ConvertStream2Json(InputStream inputStream)

{

String jsonStr = “”;

// ByteArrayOutputStream相當於內存輸出流

ByteArrayOutputStream out = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len = 0;

// 將輸入流轉移到內存輸出流中

try

{

while ((len = inputStream.read(buffer, 0, buffer.length)) != -1)

{

out.write(buffer, 0, len);

}

// 將內存流轉換為字元串

jsonStr = new String(out.toByteArray());

}

catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

return jsonStr;

}

}

2、獲取javaBean

public static Person getPerson(String jsonStr)

{

Person person = new Person();

try

{// 將json字元串轉換為json對象

JSONObject jsonObj = new JSONObject(jsonStr);

// 得到指定json key對象的value對象

JSONObject personObj = jsonObj.getJSONObject(“person”);

// 獲取之對象的所有屬性

person.setId(personObj.getInt(“id”));

person.setName(personObj.getString(“name”));

person.setAddress(personObj.getString(“address”));

}

catch (JSONException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

return person;

}

public static ListPerson getPersons(String jsonStr)

{

ListPerson list = new ArrayListPerson();

JSONObject jsonObj;

try

{// 將json字元串轉換為json對象

jsonObj = new JSONObject(jsonStr);

// 得到指定json key對象的value對象

JSONArray personList = jsonObj.getJSONArray(“persons”);

// 遍歷jsonArray

for (int i = 0; i personList.length(); i++)

{

// 獲取每一個json對象

JSONObject jsonItem = personList.getJSONObject(i);

// 獲取每一個json對象的值

Person person = new Person();

person.setId(jsonItem.getInt(“id”));

person.setName(jsonItem.getString(“name”));

person.setAddress(jsonItem.getString(“address”));

list.add(person);

}

}

catch (JSONException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;

}

如何用Gson解析複雜的Json數據

你先定義類,然後使用Gson的fromJson方法轉換成類。

下面是我的代碼:

public class showapi_res_body {

private cityInfo cityInfo = new cityInfo();

private f1 f1 = new f1();

@Override

public String toString() {

return “showapi_res_body [cityInfo=” + cityInfo.toString() + “, f1=” + f1.toString() + “]”;

}

}

public class day_weather_pic {

private int night_air_temperature = 19;

private String night_weather = “多雲”;

@Override

public String toString() {

return “day_weather_pic [night_air_temperature=” + night_air_temperature + “, night_weather=” + night_weather

+ “]”;

}

}

public class f1 {

private String day=”20150906″;

private int day_air_temperature=3;

private String day_weather= “晴”;

private day_weather_pic day_weather_pic = new day_weather_pic();

@Override

public String toString() {

return “f1 [day=” + day + “, day_air_temperature=” + day_air_temperature + “, day_weather=” + day_weather

+ “, day_weather_pic=” + day_weather_pic.toString() + “]”;

}

}

public class cityInfo {

private String c2 =”lanzhou”;

private String c3 =”蘭州”;

@Override

public String toString() {

return “cityInfo [c2=” + c2 + “, c3=” + c3 + “]”;

}

}

public class showapi {

private int showapi_res_code = 0;

private String showapi_res_error = “”;

private showapi_res_body showapi_res_body = new showapi_res_body();

@Override

public String toString() {

return “showapi [showapi_res_code=” + showapi_res_code + “, showapi_res_error=” + showapi_res_error

+ “, showapi_res_body=” + showapi_res_body.toString() + “]”;

}

}

public class test {

public static void main(String[] args) {

showapi anObject = new showapi();

Gson gson = new Gson();

String json = gson.toJson(anObject);

System.out.println(json.toString());

showapi a = gson.fromJson(json, showapi.class);

System.out.println(a.toString());

}

}

怎樣使用Gson 解析 json字元串

Gson是谷歌推出的解析json數據以及將對象轉換成json數據的一個開源框架. 現在json因其易讀性和高效率而被廣泛的使用著. 相對於java以及其它json的解析框架,Gson非常的好用. 簡單來講就是根據json的數據結構定義出相應的javabean

原創文章,作者:LDCD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137590.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LDCD的頭像LDCD
上一篇 2024-10-04 00:17
下一篇 2024-10-04 00:17

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論