jsonをboolean拡張許容値(json-lib)に変換
プロジェクトでは、ある値を1に変換してtrueに変換し、値を0に変換してfalseに変換する必要があります.
json-libのデフォルトでは、「true」、「yes」、「on」がtrueに変換され、「false」、「no」、「off」がfalseに変換されます.
public final class BooleanMorpher extends AbstractPrimitiveMorpherがfinalとして設計された.
BooleanMorpherの代わりにクラスを書き直します.コードは次のとおりです.
次のように呼び出されます.
json-libのデフォルトでは、「true」、「yes」、「on」がtrueに変換され、「false」、「no」、「off」がfalseに変換されます.
public final class BooleanMorpher extends AbstractPrimitiveMorpherがfinalとして設計された.
BooleanMorpherの代わりにクラスを書き直します.コードは次のとおりです.
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import net.sf.ezmorph.MorphException;
import net.sf.ezmorph.primitive.AbstractPrimitiveMorpher;
/**
* json boolean
*
* @author qiaoyao
* @version 1.0,2010-6-2
*/
public class MapToBooleanMorpher extends AbstractPrimitiveMorpher {
private boolean defaultValue;
public MapToBooleanMorpher() {
}
public MapToBooleanMorpher(boolean defaultValue) {
super(true);
this.defaultValue = defaultValue;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof MapToBooleanMorpher)) {
return false;
}
MapToBooleanMorpher other = (MapToBooleanMorpher) obj;
EqualsBuilder builder = new EqualsBuilder();
if ((super.isUseDefault()) && (other.isUseDefault())) {
builder.append(getDefaultValue(), other.getDefaultValue());
return builder.isEquals();
}
if ((!super.isUseDefault()) && (!other.isUseDefault())) {
return builder.isEquals();
}
return false;
}
public boolean getDefaultValue() {
return this.defaultValue;
}
@Override
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder();
if (super.isUseDefault()) {
builder.append(getDefaultValue());
}
return builder.toHashCode();
}
public boolean morph(Object value) {
if (value == null) {
if (super.isUseDefault()) {
return this.defaultValue;
}
throw new MorphException("value is null");
}
if (value instanceof Boolean)
return ((Boolean) value).booleanValue();
if (value instanceof Number) {
if ((value instanceof Double)
&& (((Double.isInfinite(((Number) value).doubleValue())) || (Double
.isNaN(((Number) value).doubleValue()))))) {
return true;
}
if ((value instanceof Float)
&& (((Float.isInfinite(((Number) value).floatValue())) || (Float
.isNaN(((Number) value).floatValue()))))) {
return true;
}
long longValue = ((Number) value).longValue();
return longValue != 0L;
}
String s = String.valueOf(value);
if ((s.equalsIgnoreCase("true")) || (s.equalsIgnoreCase("yes"))
|| (s.equalsIgnoreCase("on")) || (s.equalsIgnoreCase("1")))
return true;
if ((s.equalsIgnoreCase("false")) || (s.equalsIgnoreCase("no"))
|| (s.equalsIgnoreCase("off")) || (s.equalsIgnoreCase("0")))
return false;
if (super.isUseDefault()) {
return this.defaultValue;
}
throw new MorphException("Can't morph value: " + value);
}
@Override
public Class<?> morphsTo() {
return Boolean.TYPE;
}
}
次のように呼び出されます.
import com.winxuan.paipai.support.sdk.util.json.morpher.MapToBooleanMorpher;
import net.sf.ezmorph.MorpherRegistry;
import net.sf.ezmorph.object.DateMorpher;
import net.sf.ezmorph.primitive.BooleanMorpher;
import net.sf.json.util.JSONUtils;
/**
* json Morpher
*
* @author qiaoyao
* @version 1.0, 11:05:43
*/
public class CustomMorpherRegistry {
public static final String[] DATE_FORMAT = { "yyyy-MM-dd HH:mm:ss" };
/*
* BooleanMorpher, DateMorpher,MapToBooleanMorpher
*/
public static void registerMorpher() {
JSONUtils.getMorpherRegistry().clear(BooleanMorpher.class);//( true, )
MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();
morpherRegistry.registerMorpher(new DateMorpher(DATE_FORMAT));
morpherRegistry.registerMorpher(new MapToBooleanMorpher(), true);//true BooleanMorpher 。
}
}