博客爲 有時個哥 原創,如需轉載請標明出處:http://blog.csdn.net/ls703/article/details/41822209
json一般是Android中比較常用的與服務器交互的數據形式。我們常用的架包來解析json字符串有fastjson和gson
分別寫了兩個工具類:
fastJson
import java.util.ArrayList;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
import android.text.TextUtils;
/**
* 解析json字符串和json序列化
* @author song
* @param <T>
*
*/
public class JSONUtils {
/**
* 按章節點得到相應的內容
* @param jsonString json字符串
* @param note 節點
* @return 節點對應的內容
*/
public static String getNoteJson(String jsonString,String note){
if(!TextUtils.isEmpty(jsonString)&&!TextUtils.isEmpty(note)){
try {
JSONObject object = JSONObject.parseObject(jsonString);
return object.getString(note);
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 把相對應節點的內容封裝爲對象
* @param jsonString json字符串
* @param beanClazz 要封裝成的目標對象
* @return 目標對象
*/
public static <T> T parserObject(String jsonString,String note,Class<T> beanClazz){
if(jsonString != null){
String noteJson = getNoteJson(jsonString, note);
T object = JSON.parseObject(noteJson, beanClazz);
return object;
}
return null;
}
/**
* 按照節點得到節點內容,轉化爲一個數組
* @param jsonString json字符串
* @param beanClazz 集合裏存入的數據對象
* @return 含有目標對象的集合
*/
public static <T> List<T> parserArray(String jsonString,String note,Class<T> beanClazz){
if(!TextUtils.isEmpty(jsonString)&&!TextUtils.isEmpty(note)){
List<T> objects = new ArrayList<T>();
String noteJson = getNoteJson(jsonString, note);
if(!TextUtils.isEmpty(noteJson)){
objects = JSON.parseArray(noteJson, beanClazz);
}else{
return null;
}
return objects;
}
return null;
}
/**
* 把對象轉化爲json字符串
* @param obj 要轉化的對象
* @return 返回json字符串
*/
public static String toJsonString(Object obj){
if(obj != null){
return JSON.toJSONString(obj);
}else{
throw new RuntimeException("對象不能爲空");
}
}
public static <T> T jsonString2Bean(String jsonString ,Class<T> beanClazz){
if(jsonString == null){
return null;
}
T object = JSON.parseObject(jsonString, beanClazz);
return object;
}
/**
* 把jsonString轉化爲多個bean對象數組
* @param jsonString
* @param beanClazz
* @return
*/
public static <T> List<T> jsonString2Beans(String jsonString ,Class<T> beanClazz){
if(jsonString == null){
return null;
}
List<T> objects = new ArrayList<T>();
objects = JSON.parseArray(jsonString, beanClazz);
return objects;
}
}
import java.util.ArrayList;
import java.util.List;
import android.text.TextUtils;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
/**
* GsonUtils.java
* Gson解析json的工具類,用於解析json字符串,或把bean轉化爲json字符串
* @author LiuSong
* @date 2014-12-9
* @version V1.0
*/
public class GsonUtils {
/**
* 按章節點得到相應的內容
* @param jsonString json字符串
* @param note 節點
* @return 節點對應的內容
*/
public static String getNoteJsonString(String jsonString,String note){
if(TextUtils.isEmpty(jsonString)){
throw new RuntimeException("json字符串");
}
if(TextUtils.isEmpty(note)){
throw new RuntimeException("note標籤不能爲空");
}
JsonElement element = new JsonParser().parse(jsonString);
if(element.isJsonNull()){
throw new RuntimeException("得到的jsonElement對象爲空");
}
return element.getAsJsonObject().get(note).toString();
}
/**
* 按照節點得到節點內容,然後傳化爲相對應的bean數組
* @param jsonString 原json字符串
* @param note 節點標籤
* @param beanClazz 要轉化成的bean class
* @return 返回bean的數組
*/
public static <T> List<T> parserJsonToArrayBeans(String jsonString,String note,Class<T> beanClazz){
String noteJsonString = getNoteJsonString(jsonString,note);
return parserJsonToArrayBeans(noteJsonString,beanClazz);
}
/**
* 按照節點得到節點內容,轉化爲一個數組
* @param jsonString json字符串
* @param beanClazz 集合裏存入的數據對象
* @return 含有目標對象的集合
*/
public static <T> List<T> parserJsonToArrayBeans(String jsonString,Class<T> beanClazz){
if(TextUtils.isEmpty(jsonString)){
throw new RuntimeException("json字符串爲空");
}
JsonElement jsonElement = new JsonParser().parse(jsonString);
if(jsonElement.isJsonNull()){
throw new RuntimeException("得到的jsonElement對象爲空");
}
if(!jsonElement.isJsonArray()){
throw new RuntimeException("json字符不是一個數組對象集合");
}
JsonArray jsonArray = jsonElement.getAsJsonArray();
List<T> beans = new ArrayList<T>();
for (JsonElement jsonElement2: jsonArray) {
T bean = new Gson().fromJson(jsonElement2, beanClazz);
beans.add(bean);
}
return beans;
}
/**
* 把相對應節點的內容封裝爲對象
* @param jsonString json字符串
* @param beanClazz 要封裝成的目標對象
* @return 目標對象
*/
public static <T> T parserJsonToArrayBean(String jsonString,Class<T> clazzBean){
if(TextUtils.isEmpty(jsonString)){
throw new RuntimeException("json字符串爲空");
}
JsonElement jsonElement = new JsonParser().parse(jsonString);
if(jsonElement.isJsonNull()){
throw new RuntimeException("json字符串爲空");
}
if(!jsonElement.isJsonObject()){
throw new RuntimeException("json不是一個對象");
}
return new Gson().fromJson(jsonElement, clazzBean);
}
/**
* 按照節點得到節點內容,轉化爲一個數組
* @param jsonString json字符串
* @param note json標籤
* @param beanClazz 集合裏存入的數據對象
* @return 含有目標對象的集合
*/
public static <T> T parserJsonToArrayBean(String jsonString,String note,Class<T> clazzBean){
String noteJsonString = getNoteJsonString(jsonString, note);
return parserJsonToArrayBean(noteJsonString, clazzBean);
}
/**
* 把bean對象轉化爲json字符串
* @param obj bean對象
* @return 返回的是json字符串
*/
public static String toJsonString(Object obj){
if(obj!=null){
return new Gson().toJson(obj);
}else{
throw new RuntimeException("對象不能爲空");
}
}
}