【发布时间】:2012-12-10 22:31:34
【问题描述】:
我正在使用 FlexJSON,但无法从 int 解析 Date 对象。我正在尝试像这样使用 JSONDeserializer:
String json = decryptJson(new String(personalInformationData));
return new JSONDeserializer<PersonalInformation>().deserialize(json);
而json的值为:
{"address1":"123 Fake St","address2":"#4","address3":"","city":"Springfield","class":"PersonalInformation","confirmEmailAddress":"foo@bar.com","coverageGroupName":"","coverageGroupNumber":"","coverageType":"I","dob":21600000,"emailAddress":"foo@bar.com","firstName":"Zapp","formOfId":"D","group":false,"idNum":"K201132083220","idState":"AL","individual":true,"lastName":"Brannigan","middleInitial":"","nonUsAddress":false,"nonUsAddress1":null,"nonUsAddress2":null,"nonUsAddress3":null,"phone":"(555) 555-5555","ssn":"555555555","state":"OH","zip":"55555"}
除非出生日期(dob 键)值在 1969 年 12 月 7 日和 1970 年 1 月 25 日之间(或 -2138400000 到 2095200000 毫秒),否则所有内容都会被正确解析,然后 FlexJSON 会引发此错误:
[JSONException: [ dob ]: Parsing date 21600000 was not recognized as a date format]
我不确定这是怎么发生的,因为 new Date(21600000) 的计算结果为 Thu Jan 01 00:00:00 CST 1970。
有人遇到过吗?
更新 #1
所以看起来这个错误正在发生,因为 JSONDeserializer 无法处理保存为 Unix TimeStamp 的日期,这些日期在 1969 年 12 月 7 日到 1970 年 1 月 25 日的范围内。接受该范围之外的任何其他日期也是一个 Unix 时间戳。
我认为我不需要使用 .use() 实现自定义 ObjectFactory 或创建自定义 Transformer,因为其他 Unix 时间戳工作不在失败日期范围内。
更新 #2
我尝试在序列化时实现transformer,以使用以下方法将日期从 Unix 时间戳更改为日期格式的字符串:
String json = new JSONSerializer().transform(new DateTransformer("yyyy-caMM-dd"), "dob").serialize(personalInformation);
这完全按照预期的方式工作,但在反序列化时却不行。我仍然遇到同样的错误:
[JSONException: [ dob ]: Parsing date 1970-01-01 was not recognized as a date format]
【问题讨论】:
标签: json playframework playframework-2.0 deserialization flexjson