项目中需要把某些值为1的转换为true,值为0的转换为false。
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类。
}
}
分享到:
相关推荐
`json-lib-2.4-jdk15`是JSON库的一个特定版本,专为JDK 1.5设计,确保在该环境下能够正常运行。 `json-lib`库主要包含以下组件和功能: 1. **JSON转换**:`json-lib`提供了将Java对象如Map、List、自定义类等转换...
`json-lib-2.3-jdk15.jar`是`json-lib`库的二进制版本,适用于JDK 1.5环境。这个jar文件包含了运行时需要的所有类和资源,可以在Java项目中作为依赖来处理JSON相关的操作。开发者可以将Java对象转换为JSON字符串,或...
在Java项目中,将这个jar包添加到项目的类路径(Classpath)中,就可以使用Json-lib提供的API进行JSON操作,比如将Java对象转换为JSON字符串,或将JSON字符串解析为Java对象。 使用Json-lib的一些关键知识点包括: ...
4. **类型转换**:库通常提供方法将JSON值转换为特定的Java类型,如`Integer`、`Double`、`Boolean`等。 5. **处理流式数据**:对于大文件或网络流,可以使用Jackson的`JsonParser`进行高效的读取,或`...
[http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/](http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/) 下载最新版本的JSON-lib工具包,当前最新版本为2.4,本示例中...
7. 扩展性:json-lib设计时考虑了扩展性,允许用户自定义转换规则,以适应特定的数据模型或业务需求。 在实际开发中,你可以根据项目需求选择使用json-lib的不同版本,或者根据性能需求考虑升级到更现代的JSON库。...
这个压缩包"Java_json_lib_2.4.zip"包含了JSON_lib 2.4版本的JAR文件——json-lib-2.4-jdk15.jar,这是用于支持JSON操作的核心库。 JSON_lib是Eclipselink项目的一部分,它提供了一种简单的方式来序列化和反序列化...
//字符串json转换成json, 根据情况是用JSONArray或JSONObject @Test public void testJsonStrToJSON(){ JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" ); System.out.println( ...
总之,json-lib作为一个成熟的Java库,提供了丰富的功能来处理JSON数据,无论是从Java对象转换为JSON,还是从JSON恢复为Java对象,都表现得相当灵活和高效。对于需要在Java应用中集成JSON处理能力的开发者而言,json...
1. **对象到JSON转换**: JSONLib可以将Java对象转换成JSON字符串,这在需要将Java对象发送到服务器或存储为文本文件时非常有用。 2. **JSON到对象转换**: 反之,它也可以将JSON字符串解析成Java对象,便于在Java应用...
大家都知道jsonlib2.4之后有了属性过滤的功能,就是当把一个bean转成json的时候能指定哪些属性输出哪些不输出,不过代码很难看,如下 JsonConfig config = new JsonConfig(); config.setJsonPropertyFilter(new ...
JSON-LIB是一个Java库,用于在Java应用程序中处理JSON数据,提供了将Java对象转换为JSON字符串以及从JSON字符串反序列化回Java对象的能力。本文将对JSON-LIB的快速入门进行详细讲解,帮助开发者更好地理解和使用这个...
JSON库“Json_lib_MDd_MT”专为x86架构设计,MT可能指的是多线程(Multi-Threaded)支持,这意味着该库可以在多线程环境中安全地处理JSON数据。 JSON库在软件开发中扮演着重要角色,特别是在网络应用中,因为服务器...
总结,json-lib库提供了方便的方法来处理JSON数据,包括将JSON字符串解析为Java对象、将Java对象序列化为JSON字符串,以及在Java对象和JSON数组之间转换。这些功能对于在Java应用程序中处理JSON数据非常有用,特别是...
而在Java编程语言中,处理JSON数据通常涉及到将JSON字符串或对象转换为Java对象(如`Map`、`List`、自定义Java Bean类等),以及反之亦然的过程。 #### JSON与Java数据类型的对应关系 1. **JSON Object <-> Java ...
- 使用`JSONArray.fromObject`方法可以将boolean数组转换为JSONArray对象,例如将`{true, false, true}`数组转换为`["true", "false", "true"]`的JSON数组。 - 类似地,可以将Java中的`List`集合转换为JSONArray,...
JSON-lib 提供了将Java对象转换为JSON字符串以及将JSON字符串反序列化为Java对象的方法。 1. **List转换** 在Java代码示例中,可以看到如何将不同类型的列表转换为JSON数组。`JSONArray.fromObject()`方法被用来...
基本类型数组,如boolean数组,也可以转换为JSON数组。在代码示例中,一个boolean数组被转换为`JSONArray`。 ### 6. 字符串转换为JSON 除了集合和对象,普通的字符串也可以转换为JSON。代码片段展示了如何将一个...