`
zhaoshg
  • 浏览: 258258 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Json-lib在Json转Java时日期为空处理出错的解决办法

    博客分类:
  • java
阅读更多

 

 

我在处理json和java的相互转换中出现这样的错误:

net.sf.json.JSONException: Error while setting property=date type class java.lang.String

出错的具体情况如下:

在Java-->Json时,日期为空,我写了一个JsonDateProcessor,作为处理Date类型数据的处理器

 

 

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

public class JsonDateProcessor implements JsonValueProcessor {
	public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
	private DateFormat dateFormat;

	public JsonDateProcessor() {
		dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
	}

	/**
	 * 构造方法.
	 * 
	 * @param datePattern
	 *            日期格式
	 */
	public JsonDateProcessor(String datePattern) {
		try {
			dateFormat = new SimpleDateFormat(datePattern);
		} catch (Exception ex) {
			dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
		}
	}

	public Object processArrayValue(Object value, JsonConfig jsonConfig) {
		return process(value);
	}

	public Object processObjectValue(String key, Object value,
			JsonConfig jsonConfig) {
		return process(value);
	}

	private Object process(Object value) {
		try {
			return dateFormat.format((Date) value);
		} catch (Exception e) {
			return "";
		}
	}
}

 

 

这里我将java中date处理出错时返回"",包含当date为null情况。

 

当我将json转回java的时候,报错了:net.sf.json.JSONException: Error while setting property=date type class java.lang.String

 

看了下json-lib的源码,才发现Json转Java的时候,调用ezmorph-1.0.6.jar中的DateMorpher类有问题:如果date的格式错误或者为空(总之就是转换错误)的时候,没有对错误处理。

就在net.sf.ezmorph.object.DateMorpher的这一段

  try{ 
         return dateParser.parse( strValue.toLowerCase() );
   } catch( ParseException pe ){ 
       // ignore exception, try the next format 
  } 

 

 

 所以我改成如下样子

 

         try{
            return dateParser.parse( strValue.toLowerCase() );
         }
         catch( ParseException pe ){
            return null;
         }

 

 这样就行了。

测试代码:

 

package com.jrj.datamart.tmp;

import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONObject;
import net.sf.json.util.JSONUtils;

public class JsonToObjTest {
	public static void main(String[] args) {
		try {
			JSONObject jsonObject = new JSONObject();
			jsonObject.put("str", "sssssss");
			jsonObject.put("date", "");
			String[] dateFormats = new String[] { "yyyy-MM-dd" };
			JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
			TmpObj obj = (TmpObj) JSONObject.toBean(jsonObject, TmpObj.class);
			System.out.println(obj);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

 

 运行结果:

 

com.jrj.datamart.tmp.TmpObj@5483cd[date=<null>,str=sssssss] 

  

这里的date就被转换成null了。

附件是我上传的编译过的ezmorph-1.0.6.jar。json-lib的jar没问题,有问题的是ezmorph

4
0
分享到:
评论

相关推荐

    关于Json-lib对日期型的转换解决方法

    描述中的博文链接指向了iteye上的一个博客文章,作者分享了如何解决Json-lib在处理日期类型时可能遇到的挑战。虽然具体内容无法直接提供,但从标题可以推测,文章可能涵盖了以下几点: 1. **日期格式问题**:Json-...

    json-lib小东西记录

    4. **处理日期**:JSON标准并不包含日期类型,因此在Java和JSON之间转换日期时,需要特别处理。`json-lib`提供了`JsonDateProcessor`,可以将日期转换为ISO 8601格式的字符串。 5. **XML与JSON互换**:`json-lib`还...

    JSON_LIB 相关包

    在处理JSON时,可能需要将Java对象转换为其他类型的数据,例如字符串、数字等,Ezmorph提供了这样的功能,使得数据转换变得更加简单和灵活。它的核心类`org.ezmorph.MorpherRegistry`管理了各种转换器,可以根据需要...

    使用Ajax或Easyui等框架时的Json-lib的处理方案

    为了解决这些问题,我们可以引入Json-lib库,它是一个Java用来处理JSON的开源库,提供了丰富的API来简化JSON操作。Json-lib支持将Java对象转换为JSON,反之亦然,对于日期、枚举等复杂类型也有很好的支持。 例如,...

    List对象转JSON对象jar包

    总的来说,这个"List对象转JSON对象jar包"提供了一套完整的解决方案,让Java开发者能够轻松地处理List到JSON的转换任务,提高了开发效率并降低了出错的可能性。在实际应用中,结合使用这些库可以构建健壮且灵活的...

    Java jar JSON依赖包

    在处理JSON时,如果需要将Java对象转换为JSON格式或反之,ezmorph可以帮助进行数据类型的转换,使得数据能够适应JSON的格式要求。 2. **json-lib-2.2.2-jdk15.jar**:这是JSON库的一个实现,适用于Java平台。它提供...

    json运行所需包共包含3个文件

    1. ezmorph-1.0.6.jar:这是一个Java库,主要功能是对象到对象的转换,它提供了一种简单的方法来改变Java对象的结构,这在处理JSON数据时可能会很有用,因为JSON数据通常需要转换为Java对象以便进一步操作。...

    很好的一款解析Json字符串的工具

    “Gson”是Google提供的一个Java库,它能够将Java对象转换为JSON字符串,反之亦然。Gson的强大之处在于它的灵活性和自动化,开发者无需编写复杂的序列化和反序列化代码,只需简单的配置就能实现JSON数据与Java对象...

    Json用到的6个jar包

    在处理JSON时,它可能用于将JSON对象转换成其他复杂的Java对象,或者将Java对象转换成适合JSON的格式。 5. **commons-lang.jar**:Apache Commons Lang是Apache的一个子项目,提供了一些高级的Java语言功能,如字符...

    APIJSON-master.zip

    - **高性能**:由于其优化的设计,APIJSON 在处理大数据量时也能保持良好的性能。 总的来说,APIJSON 是一款优秀的 web 开发框架,它结合了 ORM 和 RESTful API 的优势,致力于简化前后端的交互,提高开发效率,并...

    jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法

    在大数据环境下,高效、准确地处理JSON数据尤为重要,因为数据量大时,手动处理效率低且容易出错。json-lib库提供的工具函数可以帮助开发者快速解决这类问题,提高代码的可读性和维护性。同时,理解如何处理特殊字符...

    使用JSON插件实现JSON类型的Result

    2. 在处理请求的方法中,将业务逻辑的结果转化为JSON对象。 3. 设置HTTP响应头,指定返回内容类型为`application/json`。 4. 将JSON对象写入响应流。 5. 客户端(如JSP、JavaScript)通过AJAX请求,接收到JSON数据后...

    java常用的lib

    Java编程语言在开发过程中,经常会使用到各种第三方库(lib),以提高开发效率,简化代码,处理特定任务。这些库提供了丰富的功能,涵盖了网络通信、数据处理、数据库操作、日志记录等多个方面。本篇文章将重点介绍...

    mysql-connector-java-8.0.23.jar

    当连接失败或执行SQL语句出错时,会抛出这些异常,需要捕获并处理。 6. **连接池** 对于大型应用,推荐使用连接池(如C3P0、HikariCP或Apache DBCP)来管理数据库连接。连接池可以重用已建立的连接,减少数据库...

    使用json的jar包

    在处理JSON时,要注意可能出现的异常,如`JsonParseException`、`JsonMappingException`等。确保使用try-catch语句捕获并处理这些异常。 7. **性能考虑** 虽然所有这些库都提供了JSON操作功能,但性能可能会有所...

    Java解析JSON数据时报错问题解决方案

    Java解析JSON数据时,若遇到类似问题,首先要定位出错代码,分析异常信息,然后检查数据内容。在本案例中,问题源于JSON数据中的回车符导致的解析异常。通过去除这些特殊字符,可以确保数据能正确解析。同时,利用...

    JSONObject依赖jar包

    6. **错误处理**:在处理JSON时,需要注意可能抛出的异常,如`JSONException`。确保在可能出错的地方使用try-catch块来捕获并处理异常。 通过以上步骤,你可以在Java项目中有效地使用`JSONObject`处理JSON数据。...

    基于struts+hibernate+spring银行开发的接口小系统

    1. `json-lib-2.0-jdk15.jar`:这是JSON库,用于处理JSON(JavaScript Object Notation)数据格式。在银行接口系统中,可能用于数据交换,因为JSON是一种轻量级、易于读写的格式,适合于前后端数据传输。 2. `...

    web项目常用jar包及说明.zip

    Struts 2需要的jar包: ...6.json-lib-2.2.3-jdk15.jar 另: EL表达式:jstl.jar excel表格:jxl.jar 操作pdf文件:iText-5.0.5.jar 统计图(JFreechart两个):jcommon-1.0.10.jar,jfreechart-1.0.6.jar

    JAVA项目文件结构与配置文档(干货)

    在Java项目开发中,构建一个合理的文件结构与配置文档至关重要,因为它直接影响到项目的可维护性、扩展性和团队协作效率。本文将深入解析一个典型的Java项目文件结构及其配置,以帮助开发者理解和建立规范化的项目...

Global site tag (gtag.js) - Google Analytics