`

用json时的一个问题

阅读更多
假设有一个Person类,
public class Person{   
   private java.util.Date birthday;   
  
   // settor and gettor methods.....   
}  


现在客户端那边传来如下的json规则的字符串String personJson = "{birthday:\"06/28/2008 17:00:00\"}",要用
JSONOjbect.toBean(JSONObject.from(personJson ),Person.class)方法来获得相应的Person实例时就出问题了,报错如下:

[align=center]2008-6-19 13:57:39 net.sf.json.JSONObject morphPropertyValue   
警告: Can't transform property 'birthday' from java.lang.String into java.util.Date. Will register a default Morpher   
2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph   
信息: Property 'java.util.Date.class' has no write method. SKIPPED.   
2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph   
警告: Property 'java.lang.String.date' does not exist. SKIPPED.   
2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph   
信息: Property 'java.util.Date.day' has no write method. SKIPPED.   
2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph   
警告: Property 'java.lang.String.hours' does not exist. SKIPPED.   
2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph   
警告: Property 'java.lang.String.minutes' does not exist. SKIPPED.   
2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph   
警告: Property 'java.lang.String.month' does not exist. SKIPPED.   
2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph   
警告: Property 'java.lang.String.seconds' does not exist. SKIPPED.   
2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph   
警告: Property 'java.lang.String.time' does not exist. SKIPPED.   
2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph   
信息: Property 'java.util.Date.timezoneOffset' has no write method. SKIPPED.   
2008-6-19 13:57:39 net.sf.ezmorph.bean.BeanMorpher morph   
警告: Property 'java.lang.String.year' does not exist. SKIPPED.   
Person's brithday: Thu Jun 19 13:57:39 CST 2008  
  [/align]


注意这里虽然有"Person's brithday: Thu Jun 19 13:57:39 CST 2008  "这样输出,但它的时间值与输入不符.

这个怎么解决?

以下是我做实验用的Java代码:
=======================
package json;   
  
import java.util.Date;   
  
import net.sf.json.JSONObject;   
  
public class Person {   
    private Date birthday;   
  
    public Date getBirthday() {   
        return birthday;   
    }   
  
    public void setBirthday(Date birthday) {   
        this.birthday = birthday;   
    }   
       
    public static Person getInstance(String jsonVale) {   
        return (Person)JSONObject.toBean(JSONObject.fromObject(jsonVale),Person.class);   
    }   
       
    public static void main(String[] args) {   
        String personJson = "{birthday:\"06/28/2008 17:00:00\"}";   
           
        Person p = getInstance(personJson);   
           
        System.out.println("Person's brithday: "+ p.getBirthday());   
    }   
}  


====
所需Jar包见附件.
分享到:
评论
2 楼 rmn190 2008-08-06  
<pre name='code' class='java'>class MapToDateMorpher extends AbstractObjectMorpher { //https://sourceforge.net/forum/forum.php?thread_id=1861466&amp;forum_id=587134
private static String DATE_TIME_FORMAT  = "MM/dd/yyyy HH:mm:ss";
static SimpleDateFormat dateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT);
   
    static TimeZone pstTimeZone = TimeZone.getTimeZone("PST");
   

public Object morph(Object value) {
if(value instanceof String) {
String s = (String)value;
return convertStringToTimestamp(s);
}
return null;
}

public Class morphsTo() {
return Date.class;
}

public boolean supports(Class clazz) {
// return clazz.equals(String.class);
return String.class.isAssignableFrom( clazz );
}

private  Date  convertStringToTimestamp(String input){

        if(!StringUtils.isEmpty(input)){
            try {
return dateTimeFormat.parse(input);
} catch (ParseException e) {
}
        }

        return null;
    }
}</pre>
 
1 楼 ham 2008-06-19  
这是因为你在json中的字符串类型的"06/28/2008 17:00:00"
在java中没有办法直接转换成为Date类型的数据.因而报出了异常

你需要通过JsonValueProcessor类,进行日期的转换格式.

解决方法可以参见:
[url]http://bolingsky.blog.sohu.com/74165282.html [/url]

里面有详细描述.

相关推荐

    读写json中文ASCII乱码问题的解决方法

    在JSON中,字符串默认使用Unicode编码,但在某些场景下,特别是与Python交互时,可能会遇到编码转换的问题,特别是在处理中文字符时。 在Python 2.x中,当处理包含非ASCII字符的字符串时,如果不指定编码方式,...

    json-c 一个用于c语言的json解析库,很强大

    `json-c`就是这样一个专门用于C语言的JSON解析库,它提供了对JSON数据的读取、创建、修改和序列化等功能,使得C程序员可以方便地与JSON格式进行交互。 `json-c`库的核心特性包括: 1. **解析和生成JSON**:`json-c...

    JSON.rar_Delphi JSON_JSON_delphi json_json delphi

    5. **错误处理**:在处理JSON时,可能会遇到语法错误、编码问题或数据不匹配等问题。Delphi提供了异常处理机制,可以捕获并处理这些错误。 6. **性能优化**:对于大量数据,优化JSON序列化和解析的性能至关重要。...

    JSON库使用DEMO

    它基于JavaScript的一个子集,设计简洁且易于人阅读和编写,同时也易于机器解析和生成。在这个“JSON库使用DEMO”中,我们将探讨如何在编程中利用JSON库进行数据的序列化和反序列化,以及相关的操作。 1. **JSON的...

    json转换jsonschema

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,...例如,如果你正在开发一个Web应用,你可以先将用户提交的JSON数据转换为JSON Schema,然后用它来验证后续的数据输入,防止因数据不合规导致的问题。

    JsonView - 一个快速处理json数据的软件

    - **Newtonsoft.Json.dll**:这是一个流行的.NET JSON库,用于序列化和反序列化JSON,它可能是JsonView内部使用的库,以便于解析和处理JSON数据。 - **JsonViewer.dll**:这可能是JsonView的核心组件,包含了JSON...

    jdk1.4 json包 6个全

    在处理JSON时,日志记录是非常重要的,用于追踪错误和调试问题,而Commons Logging则提供了一个统一的日志接口,方便切换不同日志框架。 这六个jar文件组合在一起,构成了一个完整的JSON处理环境,特别适合基于JDK...

    工具类,根据给定长度,使用递归的方式拆分一个json成为多个json组成的列表

    在这个场景中,"工具类,根据给定长度,使用递归的方式拆分一个json成为多个json组成的列表"就是解决此类问题的一个方法。 首先,我们要理解这个工具类的工作原理。递归是一种在函数内部调用自身的技术,通常用于...

    JSON6个jar包

    4. `json-lib-2.4-jdk15.jar`:这是JSON Lib库,一个支持多种Java环境的JSON处理器。它可以将Java对象转换为JSON表示,并将JSON字符串反序列化为Java对象。JSON Lib集成了多个第三方库,如上述的Commons Collections...

    cpp-json11一个迷你的C11的JSON库

    5. **错误处理**:在解析过程中遇到错误时,`cpp-json11`会抛出一个`json11::Json::Error`异常,包含了错误的位置和原因。 6. **灵活性**:`cpp-json11`允许直接从`std::istream`或`std::string`读取JSON,也可以...

    JSON_Trans.rar_LABVIEW转换JSON_json Labview_labivew json_labview j

    标题“JSON_Trans.rar_LABVIEW转换JSON_json Labview_labivew json_labview j”表明这是一个关于如何在LabVIEW中实现JSON转换的实践教程或示例。 描述中提到,“LabVIEW建立JSON通讯示例,通过建立簇,将数据转换成...

    一个使用json生成phpclass代码的工具

    标题中的“一个使用json生成phpclass代码的工具”指的是一个特定的软件或脚本,它能够根据JSON(JavaScript Object Notation)数据格式自动生成PHP类(Class)代码。JSON是一种轻量级的数据交换格式,易于人阅读和...

    分享一个好用的JSON编辑器JSONedit

    3. **验证和错误检查**:在输入JSON数据时,编辑器会实时检查语法,确保JSON的正确性,避免因格式错误导致的问题。 4. **拖放操作**:用户可以通过拖放方式在树形视图中添加、移动或删除键值对,提高编辑效率。 5....

    Java Http请求传json数据乱码问题的解决

    在实际解决乱码问题的过程中,如果发现使用Base64加密传输中文数据还会出现问题,可以改用URL编码的方式来传输数据,即使用JavaScript的`encodeURI`函数对数据进行两次URL编码,后端接收到后进行一次URL解码即可。...

    Jackson将json string转为Object,org.json读取json数组的实例

    描述中提到了一个实例,也就是使用Jackson库将JSON字符串转换为Java对象(Map),然后使用org.json库读取JSON数组。实例中说明了遇到的困难,即在使用Map读取第一级数据之后,尝试读取数组中的特定值时遇到了问题,...

    Ajax中使用JSON传输数据

    `json.js`文件可能是JavaScript中处理JSON的一个工具库,它提供了类似的功能,但用在客户端,帮助解析服务器返回的JSON字符串。例如,`eval()`或`JSON.parse()`函数可以用来解析JSON字符串为JavaScript对象: ```...

    json比对js插件

    在JavaScript中,这样的库通常提供API接口,允许开发者传入两个JSON对象,然后返回一个表示差异的JSON对象或数组。 使用这类插件的一般步骤包括: 1. 导入jsondiff库到项目中。 2. 解析或创建需要比较的JSON对象。...

    Delphi_JSON delphi7解析JSON控件

    这为那些仍在使用Delphi 7的开发者提供了一个可靠的解决方案,让他们无需升级到更高版本就能处理JSON数据。 在使用"Delphi_JSON"控件时,开发者可以期待以下功能: 1. 解析JSON:控件应提供一个方法,将JSON格式的...

    json lib json lib

    JSON Lib是一个广泛使用的Java JSON处理库,它提供了丰富的功能,包括: 1. **JSON解析和生成**:JSON Lib可以将JSON字符串解析成JSON对象,反之亦然。这对于与服务器进行数据交互非常有用,比如AJAX请求。 2. **...

    json2.js 字符串转转json对象工具

    然而,如果你需要确保在所有浏览器中都能正确处理JSON,那么包含json2.js库是一个安全的选择,尤其是当你的目标用户可能还在使用较旧的浏览器时。 在提供的压缩包中,有两个文件:`json2-debug.js`和`json2.js`。`...

Global site tag (gtag.js) - Google Analytics