JSONObjectProxy
0
JSONObject
这个类使用getString
方法时,如果没有key
时,会提示net.sf.json.JSONException: JSONObject["key"] not found.
错误。
所以这里写了一个代理程序,判断是否为空,代码如下:
package com.demo.json;
import java.math.BigDecimal;
import net.sf.json.JSONNull;
import net.sf.json.JSONObject;
/**
* 代理JSONObject对象
* 不能继承JSONObject,此对象为final
*/
public class JSONObjectProxy {
private JSONObject json;
public JSONObjectProxy(JSONObject json) {
if(json == null)
throw new IllegalArgumentException("参数错误");
this.json = json;
}
public String getString(String key) {
if(json.containsKey(key)) {
Object value = json.get(key);
return value instanceof JSONNull ? null : value.toString();
}
return null;
}
public Short getShort(String key) {
String value = getString(key);
return value == null ? null : Short.valueOf(value);
}
public Integer getInteger(String key) {
String value = getString(key);
return value == null ? null : Integer.valueOf(value);
}
public Long getLong(String key) {
String value = getString(key);
return value == null ? null : Long.valueOf(value);
}
/**
* 键值为key的value值以multiple倍返回
* @param key 键值
* @param multiple 倍数
* @return 返回值
*/
public Integer getInteger(String key, Integer multiple) {
BigDecimal value = getBigDecimal(key);
return value == null ? null : value.multiply(new BigDecimal(multiple)).setScale(0, BigDecimal.ROUND_DOWN).intValue();
}
public BigDecimal getBigDecimal(String key) {
String value = getString(key);
return value == null ? null : new BigDecimal(value);
}
public JSONObjectProxy getJSONObjectProxy(String key) {
if(json.containsKey(key))
return new JSONObjectProxy(json.getJSONObject(key));
return null;
}
}
这里有一个很麻烦的东西,就是空字符串和空值的问题,空值返回JSONNull
对象。