- 浏览: 832767 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (363)
- 2010年3月 (3)
- 2010年4月 (3)
- Java (116)
- ExtJs (22)
- EJB3.0 (11)
- JQuery (28)
- SqlServer (5)
- Oracle (17)
- hibernate (21)
- struts2 (14)
- php (10)
- JavaScript (11)
- jbpm (6)
- spring (24)
- lucene (2)
- ibatis (7)
- C# (8)
- mysql (11)
- json (3)
- webservice (3)
- 设计模式 (1)
- jdbc (1)
- servlet (2)
- ice (6)
- 日常软件问题 (2)
- 生活 (2)
- iphone (1)
- rest (3)
- ruby (2)
- linux (13)
- quartz (1)
- poi (1)
- redis (13)
- memcached (4)
- nosql (2)
- tomcat调优 (1)
- 项目管理 (0)
最新评论
-
天使建站:
jquery里和数组相关的操作 附带具体的实例 ...
jquery对象数组 -
Cy0941:
$('#formId').form('submit',...) ...
easyui的form表单提交处理 -
shmily2038:
swifth 写道楼主,,你的命令写错啦,,[root@ser ...
centos直接yum安装nginx -
swifth:
楼主,,你的命令写错啦,,[root@server ~]# y ...
centos直接yum安装nginx -
随遇而安DXX:
...
REST
JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本文主要讲解下java和JSON之间的转换,特别是解决互相转换遇到日期问题的情况。
一、需要相关的jar包:
json-lib-xxx.jar
ezmorph-xxx.jar
commons-httpclient-xxx.jar
commons-lang-xxx.jar
commons-logging-xxx.jar
commons-collections-xxx.jar
上面的包可以从下面的连接下载:
http://commons.apache.org/index.html
http://json-lib.sourceforge.net
http://ezmorph.sourceforge.net
二、java-》JSON
1.List-》JSON
view plaincopy to clipboardprint?
List<String> list = new ArrayList<String>();
list.add("apple");
list.add("orange");
JSONArray jarr = JSONArray.fromObject(list);
System.out.println("list->json:" + jarr.toString());
打印结果:list->json:["apple","orange"]
2.Map-》JSON
view plaincopy to clipboardprint?
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "Michael");
map.put("baby", new String[] { "Lucy", "Lily" });
map.put("age", 30);
JSONObject jo = JSONObject.fromObject(map);
System.out.println("map->json:" + jo.toString());
打印结果:map->json:{"age":30,"name":"Michael","baby":["Lucy","Lily"]}
3.bean->JSON
view plaincopy to clipboardprint?
JsonBean bean = new JsonBean();
bean.setName("NewBaby");
bean.setAge(1);
bean.setBorn(new Date());
jo = JSONObject.fromObject(bean);
System.out.println("bean->json:" + jo.toString());
打印结果:bean->json:{"age":1,"born":{"date":10,"day":3,"hours":14,"minutes":14,"month":2,"seconds":1,"time":1268201641228,"timezoneOffset":-480,"year":110},"name":"NewBaby"}
这时你会发现它把bean对象里的util.Date这个类型的所有属性一一转换出来。在实际运用过程中,大多数情况下我们希望能转化为yyyy-MM-dd这种格式,下面就讲一讲如何实现:
首先要写一个新的类JsonDateValueProcessor如下:
view plaincopy to clipboardprint?
/**
* JSON 日期格式处理(java转化为JSON)
* @author Michael sun
*/
public class JsonDateValueProcessor implements JsonValueProcessor {
/**
* datePattern
*/
private String datePattern = "yyyy-MM-dd";
/**
* JsonDateValueProcessor
*/
public JsonDateValueProcessor() {
super();
}
/**
* @param format
*/
public JsonDateValueProcessor(String format) {
super();
this.datePattern = format;
}
/**
* @param value
* @param jsonConfig
* @return Object
*/
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
}
/**
* @param key
* @param value
* @param jsonConfig
* @return Object
*/
public Object processObjectValue(String key, Object value,
JsonConfig jsonConfig) {
return process(value);
}
/**
* process
* @param value
* @return
*/
private Object process(Object value) {
try {
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat(datePattern,
Locale.UK);
return sdf.format((Date) value);
}
return value == null ? "" : value.toString();
} catch (Exception e) {
return "";
}
}
/**
* @return the datePattern
*/
public String getDatePattern() {
return datePattern;
}
/**
* @param pDatePattern the datePattern to set
*/
public void setDatePattern(String pDatePattern) {
datePattern = pDatePattern;
}
}
测试代码:
view plaincopy to clipboardprint?
JsonBean bean = new JsonBean();
bean.setName("NewBaby");
bean.setAge(1);
bean.setBorn(new Date());
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor());
JSONObject jo = JSONObject.fromObject(bean, jsonConfig);
System.out.println("bean->json:" + jo.toString());
打印结果:bean->json:{"age":1,"born":"2010-03-10","name":"NewBaby"}
这就能得到我们想要的结果了。
三、JSON-》java
1.如何把json的yyyy-MM-dd的转换为Bean中的util.Date类型:
view plaincopy to clipboardprint?
JSONUtils.getMorpherRegistry().registerMorpher(
new DateMorpher(new String[] { "yyyy-MM-dd" }));
String jsonStr = "[{\"name\": \"husband\", \"age\": \"26\", \"born\": \"1984-01-12\"},{\"name\": \"wife\", \"age\": \"20\", \"born\": \"1990-05-01\"}]";
Collection<JsonBean> list = JSONArray.toCollection(JSONArray.fromObject(jsonStr), JsonBean.class);
//DateUtil.getFormatDate(date,fmtstr)日期转字符串这里不再写代码了
for (JsonBean o : list) {
System.out.println(DateUtil.getFormatDate(o.getBorn(), "yyyy-MM-dd"));
}
打印结果:
1984-01-12
1990-05-01
2. JSON-》List、 Map
view plaincopy to clipboardprint?
String listStr = "[\"apple\",\"orange\"]";
Collection<String> strlist = JSONArray.toCollection(JSONArray.fromObject(listStr));
for (String str : strlist) {
System.out.println(str);
}
String mapStr = "{\"age\":30,\"name\":\"Michael\",\"baby\":[\"Lucy\",\"Lily\"]}";
Map<String, Object> map = (Map) JSONObject.toBean(JSONObject
.fromObject(mapStr), Map.class);
for (Entry<String, Object> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
打印结果:
apple
orange
name Michael
age 30
baby [Lucy, Lily]
一、需要相关的jar包:
json-lib-xxx.jar
ezmorph-xxx.jar
commons-httpclient-xxx.jar
commons-lang-xxx.jar
commons-logging-xxx.jar
commons-collections-xxx.jar
上面的包可以从下面的连接下载:
http://commons.apache.org/index.html
http://json-lib.sourceforge.net
http://ezmorph.sourceforge.net
二、java-》JSON
1.List-》JSON
view plaincopy to clipboardprint?
List<String> list = new ArrayList<String>();
list.add("apple");
list.add("orange");
JSONArray jarr = JSONArray.fromObject(list);
System.out.println("list->json:" + jarr.toString());
打印结果:list->json:["apple","orange"]
2.Map-》JSON
view plaincopy to clipboardprint?
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "Michael");
map.put("baby", new String[] { "Lucy", "Lily" });
map.put("age", 30);
JSONObject jo = JSONObject.fromObject(map);
System.out.println("map->json:" + jo.toString());
打印结果:map->json:{"age":30,"name":"Michael","baby":["Lucy","Lily"]}
3.bean->JSON
view plaincopy to clipboardprint?
JsonBean bean = new JsonBean();
bean.setName("NewBaby");
bean.setAge(1);
bean.setBorn(new Date());
jo = JSONObject.fromObject(bean);
System.out.println("bean->json:" + jo.toString());
打印结果:bean->json:{"age":1,"born":{"date":10,"day":3,"hours":14,"minutes":14,"month":2,"seconds":1,"time":1268201641228,"timezoneOffset":-480,"year":110},"name":"NewBaby"}
这时你会发现它把bean对象里的util.Date这个类型的所有属性一一转换出来。在实际运用过程中,大多数情况下我们希望能转化为yyyy-MM-dd这种格式,下面就讲一讲如何实现:
首先要写一个新的类JsonDateValueProcessor如下:
view plaincopy to clipboardprint?
/**
* JSON 日期格式处理(java转化为JSON)
* @author Michael sun
*/
public class JsonDateValueProcessor implements JsonValueProcessor {
/**
* datePattern
*/
private String datePattern = "yyyy-MM-dd";
/**
* JsonDateValueProcessor
*/
public JsonDateValueProcessor() {
super();
}
/**
* @param format
*/
public JsonDateValueProcessor(String format) {
super();
this.datePattern = format;
}
/**
* @param value
* @param jsonConfig
* @return Object
*/
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
}
/**
* @param key
* @param value
* @param jsonConfig
* @return Object
*/
public Object processObjectValue(String key, Object value,
JsonConfig jsonConfig) {
return process(value);
}
/**
* process
* @param value
* @return
*/
private Object process(Object value) {
try {
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat(datePattern,
Locale.UK);
return sdf.format((Date) value);
}
return value == null ? "" : value.toString();
} catch (Exception e) {
return "";
}
}
/**
* @return the datePattern
*/
public String getDatePattern() {
return datePattern;
}
/**
* @param pDatePattern the datePattern to set
*/
public void setDatePattern(String pDatePattern) {
datePattern = pDatePattern;
}
}
测试代码:
view plaincopy to clipboardprint?
JsonBean bean = new JsonBean();
bean.setName("NewBaby");
bean.setAge(1);
bean.setBorn(new Date());
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor());
JSONObject jo = JSONObject.fromObject(bean, jsonConfig);
System.out.println("bean->json:" + jo.toString());
打印结果:bean->json:{"age":1,"born":"2010-03-10","name":"NewBaby"}
这就能得到我们想要的结果了。
三、JSON-》java
1.如何把json的yyyy-MM-dd的转换为Bean中的util.Date类型:
view plaincopy to clipboardprint?
JSONUtils.getMorpherRegistry().registerMorpher(
new DateMorpher(new String[] { "yyyy-MM-dd" }));
String jsonStr = "[{\"name\": \"husband\", \"age\": \"26\", \"born\": \"1984-01-12\"},{\"name\": \"wife\", \"age\": \"20\", \"born\": \"1990-05-01\"}]";
Collection<JsonBean> list = JSONArray.toCollection(JSONArray.fromObject(jsonStr), JsonBean.class);
//DateUtil.getFormatDate(date,fmtstr)日期转字符串这里不再写代码了
for (JsonBean o : list) {
System.out.println(DateUtil.getFormatDate(o.getBorn(), "yyyy-MM-dd"));
}
打印结果:
1984-01-12
1990-05-01
2. JSON-》List、 Map
view plaincopy to clipboardprint?
String listStr = "[\"apple\",\"orange\"]";
Collection<String> strlist = JSONArray.toCollection(JSONArray.fromObject(listStr));
for (String str : strlist) {
System.out.println(str);
}
String mapStr = "{\"age\":30,\"name\":\"Michael\",\"baby\":[\"Lucy\",\"Lily\"]}";
Map<String, Object> map = (Map) JSONObject.toBean(JSONObject
.fromObject(mapStr), Map.class);
for (Entry<String, Object> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
打印结果:
apple
orange
name Michael
age 30
baby [Lucy, Lily]
发表评论
-
Jackson2.x通用工具类
2014-11-03 11:38 4904import java.io.IOException; i ... -
面试题
2013-02-27 09:04 1707从1加到100(考虑减少循环次数)使用数学公式 首先要知道 ... -
单例延迟实例化
2013-01-23 08:55 13271.如果出于性能的考虑而需要对实例域使用延迟初始化,就使用双 ... -
java中重载与重写的区别
2013-01-21 10:03 925首先我们来讲讲:重载(Overloading) ( ... -
自定义标签
2012-12-15 12:58 997package com.fsti.tag; import ... -
JAXB格式化beanToXml
2012-12-14 15:03 1273context = JAXBContext.n ... -
面向对象的特征有哪些方面?
2012-12-13 09:36 1006计算机软件系统是现实 ... -
java nio缓冲器
2012-12-05 17:03 3603缓冲器仅仅是一个" 多功能 " 的数组。可 ... -
面向对象三大特性一句话概括
2012-12-04 15:58 1553封装可以隐藏实现细节,使得代码模块化; 继承可以扩 ... -
Java序列化高级认识
2012-12-04 09:13 1065将 Java 对象序列化为二进制文件的 Java 序列化技术是 ... -
面向接口编程——提升系统多态性和可扩展性
2012-12-03 14:10 1283接口的本质 接口,在表面上是由几个没有主体代码的方 ... -
面向对象之多态
2012-11-23 19:22 874多态性(polymorphisn)是允许你将父对象设置成为和一 ... -
我对"秒杀"在技术性上的一些看法
2012-11-22 11:31 1010秒杀,是指电子商务 ... -
项目编码
2012-11-16 13:59 1156看两个项目所用的编码是否一样 Java的乱码问题: ... -
SVN错误:Attempted to lock an already-locked dir
2012-11-07 09:08 1026出现这个问题后使用“ ... -
面向对象的三个基本特征
2012-11-04 08:31 1087面向对象的三个基本特征是:封装、继承、多态。 封装 封装最 ... -
预编译防sql注入
2012-11-03 20:23 1971prepareStatement会先初始化SQL,先把这个SQ ... -
Java类与对象的初始化
2012-10-19 09:33 895Java类与对象的初始化 面试的时候,经常会遇到这样的笔试题 ... -
commons bean
2012-10-19 09:15 888这是两个javabean对象 package com.bea ... -
java工具DateUtil
2012-10-12 14:42 1052//一年内的周一 public final class Da ...
相关推荐
Java与JSON互相转换是开发过程中常见的需求,尤其是在服务器端与前端之间传递数据时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易读性、易写性和高效性,被广泛应用于Web服务。Java则是...
这个"Java对象与Json之间的互相转换的jar包"正是提供了这样的功能。 这个jar包可能包含了如Jackson、Gson、Fastjson等流行的Java JSON库,它们各自提供了丰富的API来方便开发者进行对象与JSON的转换。 1. Jackson...
在Java开发中,数据交换和存储经常涉及到对象与JSON字符串之间的转换。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Java提供了多种库来实现对象与...
Jackson是Java领域最流行的JSON处理库之一,它提供了高效且灵活的API来实现JSON与Java对象之间的相互转换。本实例将详细介绍如何使用Jackson库进行JSON到Java对象的反序列化以及Java对象到JSON的序列化。 首先,...
在Java编程中,工具类(Util Classes)是程序员日常工作中不可或缺的部分,它们提供了一系列静态方法,用于执行常见的任务,如JSON解析、日期处理、字符串操作等。以下是对标题和描述中涉及的知识点的详细说明: 1....
在这个实例中,我们将深入探讨如何在Java中操作JSON,以及如何将Java对象与JSON对象进行互相转换。 首先,Java提供了多种库来处理JSON,其中最常用的是Jackson、Gson和org.json。在这里,我们主要以Jackson库为例,...
本项目专注于纯JavaScript实现JSON(JavaScript Object Notation)与JavaScript对象之间的互相转换,这对于数据的存储、传输以及序列化至关重要。JSON作为一种轻量级的数据交换格式,因其易读易写、机器可读性高而被...
在JSON与Java对象互相转换时,这个库可能用于自动映射Bean属性。 5. **commons_logging.jar**: Apache Commons Logging是一个日志接口,允许在运行时插入不同的日志实现。`json-lib`可能使用它来记录处理JSON时的...
在Java开发中,JSON(JavaScript ...它们能够方便地将Java对象和JSON格式数据互相转换,同时提供了一系列高级特性,以满足各种复杂场景的需求。通过理解和熟练使用这些工具,开发者可以更加高效地进行数据交换和处理。
- **XML与JSON转换**:`JSONArray xml2json(String xml)` 和 `String json2xml(JSONArray jsonArray)` 方法实现XML与JSON的互相转换。 - **自定义转换规则**:通过`Transformer`接口可以自定义对象转换规则。 ### ...
`json-lib`库还提供了XML与JSON的互相转换功能,这在处理不同数据格式时非常有用。此外,它支持Eclipse Collections框架,使得处理大型数据集更加高效。 需要注意的是,随着Java的发展,Java 6及更高版本已经内置了...
JSON基于JavaScript编程语言的ECMA-262 3rd Edition - December 1999标准的一个子集,尽管如此,它采用了完全独立于语言的文本格式,并兼容多种编程语言,如C、C++、C#、Java、JavaScript、Perl、Python等。...
在Java开发中,Gson库是一个非常常用的工具,它由Google提供,用于在Java对象和JSON数据之间进行互相转换。Gson库的强大之处在于它的灵活性和便捷性,使得处理JSON格式的数据变得简单易行。本测试类将深入探讨如何...
`json-lib`是一个Java库,它提供了将JSON与Java对象互相转换的功能。 在本文中,我们将探讨如何使用`json-lib`将JSON字符串转化为Java对象,并解决日期格式不匹配的问题。首先,让我们了解基本的转换方法: ```...
FastJson不仅支持JSON字符串与Java对象的互相转换,还提供了流式解析和生成的功能,使得在大数据量处理时也能游刃有余。 1. **基础用法** - **序列化(Serialize)**:将Java对象转换为JSON字符串。例如: ```...
它不仅能够快速地解析和生成JSON,而且支持将JSON对象与Java对象互相转换,这在Java开发中非常实用。在给定的资源“fastjson-1.2.58.rar”中,包含了Fastjson的特定版本1.2.58的jar包,解压后可以直接在项目中引用,...
但是,如果你在使用Gson过程中遇到问题,建议检查JSON数据的结构是否与Java对象匹配,处理可能的null值,以及正确处理自定义类型。同时,对于Web Service和UPnP的使用,确保遵循相应的协议规范,进行正确的请求和...
在Java开发中,Gson库是一个非常流行的工具,它由Google提供,用于在Java对象和JSON数据之间进行互相转换。Gson库的核心功能是将Java对象转换为它们对应的JSON字符串,反之亦然,使得JSON数据的处理变得简单而高效。...
这说明GSON库提供了一种非常直接和简洁的方式,来完成对象与JSON之间的互相转换。 通过这个示例,我们还可以注意到,GSON能够处理日期类型,虽然在JSON中日期字段被转换成字符串,但它能正确地处理Java中的Date类型...
"多货币互相转换快速汇率换算工具源码.zip" 提供了一个解决此类问题的源代码资源,适用于学习和研究。这个工具可能使用了实时或者定时更新的汇率数据来确保转换的准确性。 源码通常包括编程语言(如Python、...