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对象。