`

与JSON的第一次亲密接触

阅读更多

   字符串型的Date转化为JavaBean的问题终于解决了,现在回过头来整理下贴在博客里以备将来查询,若对别人能所帮助那就甚是欣慰了.

1, 情景再现.

     问题是这样的,浏览器那边要Ajax地传来一些数据,其中包含的Date格式为"mm/dd/yyyy hh:mm:ss".Server与Client的数据传送用JSON来封装.JSON的优点在此就不用多说了,数据从Client传到Server端后就要用JSON来自动生成相应的JavaBean.对于primitive和String类型的数据在转化时没什么问题,可在当处理字符串表示的Date信息时麻烦就来了.
   为了简化谈论,我采用了一个只包含Date类型属性的Person类来做实验.Person类的定义如下:


 public class Person{     
    private java.util.Date birthday;     
     
    // settor and gettor methods.....     
 }


   在Main方法中采用能想到的方法来把JSON格式的字符串转为JavaBean.
import net.sf.json.JSONObject;     
       
   public class PersonTest {     
            
       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());     
       }     
   }   


  可一运行,问题就出来,下面是所报的信息.
引用

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  


    注意,虽然这也有时间信息打印了出来,可细看发现它不是我们所期待的那个,它是系统的当前时间.

     这是怎么回事呢?所报的信息是什么意思?怎么出来的是系统的当前时间?

2,试着分析/解决

   2.1 找准突破口

百度/Google一番后,没找到合适或相似的解决方案,问同学同事也没有得到满意的回答,于是就想着自己来解决了.可自己对JSON的了解也仅仅停留在为数不多常用方法上,其余像"它背后是怎么实现的?都可做哪些配置?"这样的问题一点也不知道了.


[align=left][/align]看API,一是由于API里的类/接口有二十来个,虽然跟Hibernate或Spring这样的大框架里类/接口在数量上没法比,但现在要有针对性地看时真的不知从哪个开始了,于是一会儿看下JsonConfig,过会再看下...,再有就是API里的描述很少自己也不能静下心来认真地看仔细地琢磨(这大概是源自于自己编码不规范造成的对API描述没有多少信任感吧).有没有跟Hibernate里类似的document呢?或许里有相关的描述.


再往下就习惯性地用debug来跟踪代码的执行,(幸好Java里有很多很多的开源项目,debug跟踪起来了丝毫不奋进费劲.)跟踪了一两遍后除了发现是什么时候报出上述信息外还是一头雾水.没别的办法再继续吧,随着跟踪的次数增多,前面看API时注意到的那些类活了起来,它们之间的调用关系渐渐地露出了来.在这个调用过程中围绕信息报出的那几行代码里的一个概念Morpher吸引了我的注意,意识到这就是问题的突破口.(感觉自己在写侦探小说.)
1
0
分享到:
评论
3 楼 rmn190 2008-12-11  
to jxncligang:

抱歉, 我刚看到你的留言,

解决方法是:

在toBean前加一句话:JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"MM/dd/yyyy HH:mm:ss"}) );来配置记下Date转化时的Morpher就OK了
2 楼 jxncligang 2008-12-06  
請問是如何解決的呢,我也有同樣問題
jxncligang@163.com
1 楼 java.fan 2008-06-30  
你用 long 类型来表示 日期时间,不行吗?
再多传个表示时间格式的 参数,就差不多了.

相关推荐

    json,第一次练习json的html

    使用json显示员工列表

    json转换jsonschema

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。而JSON Schema则是一个JSON格式的规范,用于定义JSON数据的结构和限制,类似于XML Schema,它为JSON数据提供了...

    MFC使用json11解析JSON

    而JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web服务与客户端之间的数据传输。在本项目中,我们关注的是如何在MFC应用中使用json11库来解析和操作JSON数据。 json11是一个小型且易于...

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

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

    电协第一次作业pcb.json

    电协第一次作业pcb.json

    pb解析与生成json

    标题 "pb解析与生成json" 涉及到的技术主要围绕着ProtoBuf(Protocol Buffers)和JSON这两种数据序列化格式。ProtoBuf是由Google开发的一种高效的数据交换的序列化协议,而JSON则是一种轻量级的数据交换格式,广泛...

    实现protobuf与json的互转

    标题中的“实现protobuf与json的互转”是指在软件开发中,如何将使用Protocol Buffers(protobuf)编写的结构体数据转换成JSON格式,反之亦然。Protocol Buffers是Google推出的一种数据序列化协议,而JSON...

    Json-handle和jsonview插件

    jsonview是另一款流行的Chrome插件,它的主要功能与JSON-handle类似,但也有其独特的优点: 1. **兼容性**:jsonview不仅支持JSON,还能够处理JSONP(JSON with Padding)格式的数据,这是一种常用于跨域数据请求的...

    最好用的c++json库 nlohmann json源代码

    最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json...

    http传输与json解析

    例如,对于一个JSON对象,可以使用`new JSONObject(jsonString)`创建一个对象实例;对于JSON数组,使用`new JSONArray(jsonString)`。 3. 访问数据:通过`get()`或`opt()`方法获取键对应的值,如`JSONObject.get(...

    把一个json生成一个创建sql

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于服务器与客户端之间传递数据。SQL(Structured Query Language)则是用于管理关系数据库的语言。将JSON转换为创建SQL语句的...

    java json api,json api

    JSON(JavaScript Object ...它提供了一系列方便的API,使得JSON的创建、解析、转换变得简单,同时与其他数据格式如XML的交互也十分便捷。在理解并熟练掌握这些知识点后,开发者能够更好地应对JSON数据处理的各种场景。

    json与树的相互转换

    总的来说,JSON与树的相互转换是开发中的常见操作,通过使用如Newtonsoft.Json这样的库,我们可以轻松地在两者之间进行切换,实现数据的高效管理和操作。无论是从JSON解析成树,还是将树结构序列化为JSON,都能帮助...

    json教程(java与json的使用)

    ### JSON 教程 (Java 与 JSON 的使用) #### JSON 的基本概念 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于一种文本形式的数据表示方式,旨在简化数据传输并提高效率。JSON 与 XML 类似...

    Pbjson字符串生成与解析

    在IT行业中,序列化和反序列化是数据传输和存储的关键环节,而PBJson就是一种针对protobuf(Protocol Buffers)格式的数据与Json格式之间转换的工具。本文将深入探讨Pbjson的使用方法、原理以及它如何处理Json字符串...

    JSON入门与实战

    JSON(JavaScript Object Notation http://www. json .org/ json -zh.html ),是一种轻量级的基于文本...的在 JSON 串与 JavaScript 对象之间进行转换。如果夸大来说,它是另一种理想 的但 有别于 XML 数据交换语言。

    json net.sf.json

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传输数据。它以文本形式存储和传递数据,易于人阅读和编写,同时也易于机器解析和生成。`net.sf.json`是开源Java库,它...

    JSON net.sf.json jar包

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务和应用程序之间的数据传输。它易于人阅读和编写,同时也易于机器解析和生成。`net.sf.json`是开源项目Apache软件基金会下的一个...

    JAVA操作JSON全套包,无需另外下载一次搞定

    1. **json-lib-2.2.3-jdk15.jar**:这是Json-lib库的一个版本,它是一个Java JSON处理器,支持多种Java集合和类型,如Map、List、Bean等与JSON之间的转换。通过Json-lib,你可以方便地将Java对象转换为JSON字符串,...

    XML与JSON相互转化

    XML是一种结构化的标记语言,适用于复杂的文档结构和数据组织,而JSON则以轻量级的方式,更适合网络传输和JavaScript环境中的数据处理。 XML的结构基于元素树,每个元素可以包含其他元素、属性和文本内容。它的语法...

Global site tag (gtag.js) - Google Analytics