日期:2014-05-16  浏览次数:20389 次

用 annotation 辅助 Json-lib 转换 JavaBean

用 annotation 辅助 Json-lib 转换 JavaBean

吴 浩 ?(camry.wu@gmail.com ), 高级软件工程师, Fortinet, Inc.

简介: ?本文介绍使用 Json-lib 将 JavaBean 转换为 JSON 数据的方法。我们将使用 annotation 来灵巧地筛选 JavaBean 中的属性,并通过 annotation 来定义特殊的 JsonValueProcessor。

标记本文!

概述

如 今大量的 Web 站点应用了 AJAX 技术,通过更少的数据通讯,服务器能够更快的反馈用户请求,再通过 Javascript 的控制,让使用者有了更好的用户体验。JSON 是一种轻量级的数据交换语言,它是 Javascript 的一个子集,又有良好的可读性,经常用于客户端和服务器间的数据交换。因此,在服务器端,常常需要将实体对象(JavaBean)转换为 JSON 格式数据。本文介绍了如何使用 Json-lib 转换 JavaBean 为 JSON 格式数据,并给出解决方法,以及利用 annotation 来增强 Json-lib 的两个功能:一是灵活的筛选 JavaBean 属性;二是通过 JsonValueProcessor 来自定义如何转换 JavaBean 属性到 JSON 数据。

JSON 数据格式

JSON 的数据格式简单易读,它存在于两种基本形式:

  • 名值对(Collection):名称与值用‘:’分开;名值对之间用‘,’分隔;整体用‘ {} '括起来。例如 {name1:value1, name2:value2}
  • 值的有序队列(Array):即数组,每个值之间用‘,’分隔;整体用‘ [] '括起来。例如:[value1, value2]

这两种形式的有机组合,就形成了 JSON 数据。

使用 Json-lib 转换 JavaBean 为 JSON 数据

Json-lib 是一个 java 工具库,它提供 api 来转换 JavaBean,Map,Collection 等对象为 JSON 数据,或反过来通过 JSON 数据得到 JavaBean。

Json-lib 的使用很容易,只要使用 JSONSerializer 的 toJSON 方法就可以转换任意的 Java Object 为 JSON 对象了,再调用 JSON 对象的 toString 方法可以得到转换后的字符串。不过还有一些进一步的问题需要我们自己来解决。


清单 1. 使用 JSONSerializer

				
import net.sf.json.JSONSerializer;

List?list?=?new?ArrayList();??
list.add( "first" );
list.add( "second" );
JSON?json?=?JSONSerializer.toJSON(?list?);
System.out.println( json.toString() );
// prints?["first","second"]

class MyBean{
    private String name = "json";
    private int pojoId = 1;
    
    // getters & setters
    ...
}
json = JSONSerializer.toJSON( new MyBean() );
Sy