本文目錄一覽:
- 1、java中使用gson解析json的問題
- 2、如何統一解析JSON數據,使用Gson結合泛型類
- 3、如何通過gson解析存儲的json數組字元串
- 4、Java解析json數據
- 5、如何用Gson解析複雜的Json數據
- 6、怎樣使用Gson 解析 json字元串
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