package com.yuyh.library.utils.data;
import com.yuyh.library.utils.StringUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* @author yuyh.
* @date 16/4/10.
*/
public class JSONUtils {
private static boolean isPrintException = true;
/******************************* Long ******************************/
/**
* 获取json里面的某个Long类型的值
*
* @param jsonObject
* @param key
* @param defaultValue
* @return
*/
public static Long getLong(JSONObject jsonObject, String key, Long defaultValue) {
if (jsonObject == null || StringUtils.isEmpty(key)) {
return defaultValue;
}
try {
return jsonObject.getLong(key);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
public static Long getLong(String jsonData, String key, Long defaultValue) {
if (StringUtils.isEmpty(jsonData)) {
return defaultValue;
}
try {
JSONObject jsonObject = new JSONObject(jsonData);
return getLong(jsonObject, key, defaultValue);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
public static long getLong(JSONObject jsonObject, String key, long defaultValue) {
return getLong(jsonObject, key, (Long) defaultValue);
}
public static long getLong(String jsonData, String key, long defaultValue) {
return getLong(jsonData, key, (Long) defaultValue);
}
/******************************* Int ******************************/
/**
* 获取json里面的某个int类型的值
*
* @param jsonObject
* @param key
* @param defaultValue
* @return
*/
public static Integer getInt(JSONObject jsonObject, String key, Integer defaultValue) {
if (jsonObject == null || StringUtils.isEmpty(key)) {
return defaultValue;
}
try {
return jsonObject.getInt(key);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
public static Integer getInt(String jsonData, String key, Integer defaultValue) {
if (StringUtils.isEmpty(jsonData)) {
return defaultValue;
}
try {
JSONObject jsonObject = new JSONObject(jsonData);
return getInt(jsonObject, key, defaultValue);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
public static int getInt(JSONObject jsonObject, String key, int defaultValue) {
return getInt(jsonObject, key, (Integer) defaultValue);
}
public static int getInt(String jsonData, String key, int defaultValue) {
return getInt(jsonData, key, (Integer) defaultValue);
}
/******************************* Double ******************************/
/**
* 获取json里面的某个Double类型的值
*
* @param jsonObject
* @param key
* @param defaultValue
* @return
*/
public static Double getDouble(JSONObject jsonObject, String key, Double defaultValue) {
if (jsonObject == null || StringUtils.isEmpty(key)) {
return defaultValue;
}
try {
return jsonObject.getDouble(key);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
public static Double getDouble(String jsonData, String key, Double defaultValue) {
if (StringUtils.isEmpty(jsonData)) {
return defaultValue;
}
try {
JSONObject jsonObject = new JSONObject(jsonData);
return getDouble(jsonObject, key, defaultValue);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
public static double getDouble(JSONObject jsonObject, String key, double defaultValue) {
return getDouble(jsonObject, key, (Double) defaultValue);
}
public static double getDouble(String jsonData, String key, double defaultValue) {
return getDouble(jsonData, key, (Double) defaultValue);
}
/******************************* String ******************************/
/**
* 获取json里面的某个String类型的值
*
* @param jsonObject
* @param key
* @param defaultValue
* @return
*/
public static String getString(JSONObject jsonObject, String key, String defaultValue) {
if (jsonObject == null || StringUtils.isEmpty(key)) {
return defaultValue;
}
try {
return jsonObject.getString(key);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
public static String getString(String jsonData, String key, String defaultValue) {
if (StringUtils.isEmpty(jsonData)) {
return defaultValue;
}
try {
JSONObject jsonObject = new JSONObject(jsonData);
return getString(jsonObject, key, defaultValue);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
/******************************* JSONObject ******************************/
/**
* 获取json里面的某个JSONObject类型的值
*
* @param jsonObject
* @param key
* @param defaultValue
* @return
*/
public static JSONObject getJSONObject(JSONObject jsonObject, String key, JSONObject defaultValue) {
if (jsonObject == null || StringUtils.isEmpty(key)) {
return defaultValue;
}
try {
return jsonObject.getJSONObject(key);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
public static JSONObject getJSONObject(String jsonData, String key, JSONObject defaultValue) {
if (StringUtils.isEmpty(jsonData)) {
return defaultValue;
}
try {
JSONObject jsonObject = new JSONObject(jsonData);
return getJSONObject(jsonObject, key, defaultValue);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
/******************************* JSONArray ******************************/
/**
* 获取json里面的某个JSONArray类型的值
*
* @param jsonObject
* @param key
* @param defaultValue
* @return
*/
public static JSONArray getJSONArray(JSONObject jsonObject, String key, JSONArray defaultValue) {
if (jsonObject == null || StringUtils.isEmpty(key)) {
return defaultValue;
}
try {
return jsonObject.getJSONArray(key);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
public static JSONArray getJSONArray(String jsonData, String key, JSONArray defaultValue) {
if (StringUtils.isEmpty(jsonData)) {
return defaultValue;
}
try {
JSONObject jsonObject = new JSONObject(jsonData);
return getJSONArray(jsonObject, key, defaultValue);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
/******************************* boolean ******************************/
/**
* 获取json里面的某个boolean类型的值
*
* @param jsonObject
* @param key
* @param defaultValue
* @return
*/
public static boolean getBoolean(JSONObject jsonObject, String key, Boolean defaultValue) {
if (jsonObject == null || StringUtils.isEmpty(key)) {
return defaultValue;
}
try {
return jsonObject.getBoolean(key);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
public static boolean getBoolean(String jsonData, String key, Boolean defaultValue) {
if (StringUtils.isEmpty(jsonData)) {
return defaultValue;
}
try {
JSONObject jsonObject = new JSONObject(jsonData);
return getBoolean(jsonObject, key, defaultValue);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return defaultValue;
}
}
/**
* jsonObject过滤key再转Map
*
* @param jsonObject
* @param key
* @return
*/
public static Map<String, String> getMap(JSONObject jsonObject, String key) {
return JSONUtils.parseKeyAndValueToMap(JSONUtils.getString(jsonObject, key, null));
}
/**
* json过滤key再转Map
*
* @param jsonData
* @param key
* @return
*/
public static Map<String, String> getMap(String jsonData, String key) {
if (jsonData == null) {
return null;
}
if (jsonData.length() == 0) {
return new HashMap<String, String>();
}
try {
JSONObject jsonObject = new JSONObject(jsonData);
return getMap(jsonObject, key);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return null;
}
}
/**
* jsonObject转Map
*
* @param sourceObj
* @return
*/
@SuppressWarnings("rawtypes")
public static Map<String, String> parseKeyAndValueToMap(JSONObject sourceObj) {
if (sourceObj == null) {
return null;
}
Map<String, String> keyAndValueMap = new HashMap<String, String>();
for (Iterator iter = sourceObj.keys(); iter.hasNext(); ) {
String key = (String) iter.next();
putMapNotEmptyKey(keyAndValueMap, key, getString(sourceObj, key, ""));
}
return keyAndValueMap;
}
/**
* json 转 Map
*
* @param source
* @return
*/
public static Map<String, String> parseKeyAndValueToMap(String source) {
if (StringUtils.isEmpty(source)) {
return null;
}
try {
JSONObject jsonObject = new JSONObject(source);
return parseKeyAndValueToMap(jsonObject);
} catch (JSONException e) {
if (isPrintException) {
e.printStackTrace();
}
return null;
}
}
public static boolean putMapNotEmptyKey(Map<String, String> map, String key, String value) {
if (map == null || StringUtils.isEmpty(key)) {
return false;
}
map.put(key, value);
return true;
}
}