package com.anthony.library.utils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.Method;
/**
* Created by Anthony on 2016/3/3.
* Class Note:
* json helper for parsing json
*/
public class JSONObjectHelper {
/**
* use reflection , type allowed of json
*/
private static final Class[] ALLOWED_VALUE_TYPE = { Boolean.class, Double.class,
Integer.class, Long.class };
JSONObject jsonObject;
public JSONObjectHelper(String json) throws JSONException {
this(new JSONObject(json));
}
public JSONObjectHelper(JSONObject jsonObject) {
if(jsonObject == null){
throw new NullPointerException();
}
this.jsonObject = jsonObject;
}
/**
*get value
*/
public Object get(String name, Object defaultValue) {
if (jsonObject.has(name)) {
try {
return jsonObject.get(name);
} catch (JSONException e) {
// do nothing
}
}
return defaultValue;
}
private Object get(Class clazz, String name, Object defaultValue) {
boolean typeAllowed = false;
for (Class allowedValueType : ALLOWED_VALUE_TYPE) {
if (allowedValueType == clazz) {
typeAllowed = true;
break;
}
}
if (typeAllowed) {
Object value = get(name, defaultValue);
if (value instanceof String) {
try {
Method valueOf = clazz.getMethod("valueOf",
new Class[] { String.class });
return valueOf.invoke(clazz, (String) value);
} catch (Exception e) {
e.printStackTrace();
}
} else if (clazz.isInstance(value)) {
return value;
}
}
return defaultValue;
}
/**
* 从Name String数组获取相应的值
*/
//String 类型
public String getString(String[] names, String defaultValue) {
for(String n: names){
if(jsonObject.has(n)){
return getString(n, defaultValue);
}
}
return defaultValue;
}
public String getString(String name, String defaultValue) {
Object value = get(name, defaultValue);
return value == null ? null : String.valueOf(value);
}
//boolean 类型
public boolean getBoolean(String[] names, boolean defaultValue) {
for(String n: names){
if(jsonObject.has(n)){
return getBoolean(n, defaultValue);
}
}
return defaultValue;
}
public boolean getBoolean(String name, boolean defaultValue) {
return (Boolean) get(Boolean.class, name, defaultValue);
}
//double 类型
public double getDouble(String[] names, double defaultValue) {
for(String n: names){
if(jsonObject.has(n)){
return getDouble(n, defaultValue);
}
}
return defaultValue;
}
public double getDouble(String name, double defaultValue) {
Object value = get(name, defaultValue);
if (value instanceof String && value.equals("")) {
return defaultValue;
}
return (Double) get(Double.class, name, defaultValue);
}
//int 类型
public int getInt(String[] names, int defaultValue) {
for(String n: names){
if(jsonObject.has(n)){
return getInt(n, defaultValue);
}
}
return defaultValue;
}
public int getInt(String name, int defaultValue) {
return (Integer) get(Integer.class, name, defaultValue);
}
//long 类型
public long getLong(String[] names, long defaultValue) {
for(String n: names){
if(jsonObject.has(n)){
return getLong(n, defaultValue);
}
}
return defaultValue;
}
public long getLong(String name, long defaultValue) {
return (Long) get(Long.class, name, defaultValue);
}
//JSONArray 类型
public JSONArray getJSONArray(String[] names, JSONArray defaultValue){
for(String n: names){
if(jsonObject.has(n)){
try {
return jsonObject.getJSONArray(n);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
return defaultValue;
}
public JSONArray getJSONArray(String name, JSONArray defaultValue){
try {
return jsonObject.getJSONArray(name);
} catch (JSONException e) {
return defaultValue;
}
}
//JSONObject 类型
public JSONObject getJSONObject(String[] names, JSONObject defaultValue){
for(String n: names){
if(jsonObject.has(n)){
try {
return jsonObject.getJSONObject(n);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
return defaultValue;
}
public JSONObject getJSONObject(String name, JSONObject defaultValue){
try{
return jsonObject.getJSONObject(name);
} catch (JSONException e){
return defaultValue;
}
}
}