`
5xnl
  • 浏览: 24150 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

json转换为boolean 扩展接受值(json-lib)

    博客分类:
  • json
阅读更多
项目中需要把某些值为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和全部依赖jar包

    `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-2.3-jdk15.jar`是`json-lib`库的二进制版本,适用于JDK 1.5环境。这个jar文件包含了运行时需要的所有类和资源,可以在Java项目中作为依赖来处理JSON相关的操作。开发者可以将Java对象转换为JSON字符串,或...

    json-lib 需要的所有jar包

    在Java项目中,将这个jar包添加到项目的类路径(Classpath)中,就可以使用Json-lib提供的API进行JSON操作,比如将Java对象转换为JSON字符串,或将JSON字符串解析为Java对象。 使用Json-lib的一些关键知识点包括: ...

    java-json-lib-jdk13.zip

    4. **类型转换**:库通常提供方法将JSON值转换为特定的Java类型,如`Integer`、`Double`、`Boolean`等。 5. **处理流式数据**:对于大文件或网络流,可以使用Jackson的`JsonParser`进行高效的读取,或`...

    JSON-lib框架,转换JSON、XML不再困难

    [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,本示例中...

    json-lib相关联的所有包

    7. 扩展性:json-lib设计时考虑了扩展性,允许用户自定义转换规则,以适应特定的数据模型或业务需求。 在实际开发中,你可以根据项目需求选择使用json-lib的不同版本,或者根据性能需求考虑升级到更现代的JSON库。...

    Java 开发 json 数据的jar 涉及的相关包 Java_json_lib_2.4.zip

    这个压缩包"Java_json_lib_2.4.zip"包含了JSON_lib 2.4版本的JAR文件——json-lib-2.4-jdk15.jar,这是用于支持JSON操作的核心库。 JSON_lib是Eclipselink项目的一部分,它提供了一种简单的方式来序列化和反序列化...

    json-lib完整架包

    //字符串json转换成json, 根据情况是用JSONArray或JSONObject @Test public void testJsonStrToJSON(){ JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" ); System.out.println( ...

    json-lib 使用

    总之,json-lib作为一个成熟的Java库,提供了丰富的功能来处理JSON数据,无论是从Java对象转换为JSON,还是从JSON恢复为Java对象,都表现得相当灵活和高效。对于需要在Java应用中集成JSON处理能力的开发者而言,json...

    jsonlib.rar

    1. **对象到JSON转换**: JSONLib可以将Java对象转换成JSON字符串,这在需要将Java对象发送到服务器或存储为文本文件时非常有用。 2. **JSON到对象转换**: 反之,它也可以将JSON字符串解析成Java对象,便于在Java应用...

    改良版的json-lib2.4

    大家都知道jsonlib2.4之后有了属性过滤的功能,就是当把一个bean转成json的时候能指定哪些属性输出哪些不输出,不过代码很难看,如下 JsonConfig config = new JsonConfig(); config.setJsonPropertyFilter(new ...

    JSON-LIB快速入门(转)

    JSON-LIB是一个Java库,用于在Java应用程序中处理JSON数据,提供了将Java对象转换为JSON字符串以及从JSON字符串反序列化回Java对象的能力。本文将对JSON-LIB的快速入门进行详细讲解,帮助开发者更好地理解和使用这个...

    Json_lib_MDd_MT

    JSON库“Json_lib_MDd_MT”专为x86架构设计,MT可能指的是多线程(Multi-Threaded)支持,这意味着该库可以在多线程环境中安全地处理JSON数据。 JSON库在软件开发中扮演着重要角色,特别是在网络应用中,因为服务器...

    Java 使用json-lib处理JSON详解及实例代码

    总结,json-lib库提供了方便的方法来处理JSON数据,包括将JSON字符串解析为Java对象、将Java对象序列化为JSON字符串,以及在Java对象和JSON数组之间转换。这些功能对于在Java应用程序中处理JSON数据非常有用,特别是...

    JSON与JAVA数据的转换

    而在Java编程语言中,处理JSON数据通常涉及到将JSON字符串或对象转换为Java对象(如`Map`、`List`、自定义Java Bean类等),以及反之亦然的过程。 #### JSON与Java数据类型的对应关系 1. **JSON Object &lt;-&gt; Java ...

    java对象与json对象的转换.pdf

    - 使用`JSONArray.fromObject`方法可以将boolean数组转换为JSONArray对象,例如将`{true, false, true}`数组转换为`["true", "false", "true"]`的JSON数组。 - 类似地,可以将Java中的`List`集合转换为JSONArray,...

    java对象与json对象的转换

    JSON-lib 提供了将Java对象转换为JSON字符串以及将JSON字符串反序列化为Java对象的方法。 1. **List转换** 在Java代码示例中,可以看到如何将不同类型的列表转换为JSON数组。`JSONArray.fromObject()`方法被用来...

    json的使用和下载

    基本类型数组,如boolean数组,也可以转换为JSON数组。在代码示例中,一个boolean数组被转换为`JSONArray`。 ### 6. 字符串转换为JSON 除了集合和对象,普通的字符串也可以转换为JSON。代码片段展示了如何将一个...

Global site tag (gtag.js) - Google Analytics