用annotation辅助Json-lib转换JavaBean

概述

如今大量的 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() );
System.out.println( json.toString() );
// prints {"name":"json","pojoId":1}

问题 1: 需要有选择的提取 JavaBean 中的属性

清单 1 中的例子转换后的 JSON 数据中包含了 JavaBean 中的全部属性,可 是我们常常需要有选择的提取 JavaBean 中的特定属性出来。例如:

需要过滤掉循环引用的属性,这一点 json-lib 提供了 CycleDetectionStrategy 来处理,但是直接过滤掉更简单;

不同的情况下只需要 JavaBean 中的部分属性:比如列表界面只需要显示 Bean 的几个重要属性,而详情界面则需要显示更多的 Bean 的属性;

不同的用户权限限制用户只能获得某些属性数据;

时间: 2024-10-25 12:35:27

用annotation辅助Json-lib转换JavaBean的相关文章

json格式转换

问题描述 如果不用json lib来进行格式转换,有什么其他方法进行json格式转换不.我是用jQuery.ajax()请求Action,返回的是一个javabean,js不好处理,取不到bean的属性值.如果用json格式就方便多了.有没有什么通用的方法进行数据格式转换-- 解决方案 补充一下一楼的答案,http://code.google.com/p/google-gson,通过Gson对象,可以讲普通java对象转为json格式字符串,也可以将json格式字符串转为java对象,要求set

Java的JSON格式转换库GSON的初步使用笔记_java

现在已经有一些能将Java对象转换成JSON的开源项目了.但是大多数项目都要求你在类文件中加入Java注解,而当你无法改动源代码的时候这是无法做到的.并且它们也不支持Java泛型.但是Gson却将这两点作为自己非常重要的设计目标. 特点: 使用toJson()和fromJson()方法,就可以非常容易的完成Java对象到JSON的相互转换. 能将预先存在的无法修改的对象与JSON互相转换. 支持Java泛型的使用. 允许对象的个性化表达形式(representation). 支持各种复杂(拥有深

C#实现json格式转换成对象并更换key的方法

  本文实例讲述了C#实现json格式转换成对象并更换key的方法.分享给大家供大家参考.具体分析如下: 由于是不标准的序列化对象类型,因此你无法通过标准的反序列化类来实现,需要自定义一个序列化类或者简单点,直接自定义一个方法解析Json数据.解析后的数据用Dictionary来存放. ? 1 2 3 4 5 6 string str = "{"name": "甄嬛体","2012-05-04 14:59": "5724&qu

安卓-大神看看我这个json 对应的Javabean拿错了

问题描述 大神看看我这个json 对应的Javabean拿错了 public class Goods { public Info infos; //商品信息 public String msg; //调用接口返回信息 public String msg_code; //返回的结果码 public String result; //返回的结果 public String session; public String time; public class Info{ public List item

c#-json如何转换成C#语言

问题描述 json如何转换成C#语言 例如这个 { "group": { "id": 108, "name": "test2_modify2" } } 要怎样才能转换成C#??? 解决方案 http://blog.csdn.net/educast/article/details/7328106 解决方案二: http://www.cnblogs.com/txw1958/archive/2012/08/01/csharp-jso

jsp-怎么把JSON字符串转换成java字符串或数组或者集合

问题描述 怎么把JSON字符串转换成java字符串或数组或者集合 var chk_value =[]; $('input[name="zd_resourcecb"]:checked').each(function(){ chk_value.push($(this).val()); }); var chk_values = JSON.stringify(chk_value); jsp是这么写的 不过得到的是JSON字符串 ,我想要得到java类型的字符串或是数组什么的 解决方案 字符串反

json array转换list集合,很多数据都为空,或不对怎么办

问题描述 json array转换list集合,很多数据都为空,或不对怎么办 图片说明图片说明图片说明 json数组转换成list<>的时候,数据都为空,这是为什么,实体类也定义过了,数据也都对,怎么才能将json字符串或者json数组转换成list集合的对象啊,试了很多种方法都不行 解决方案 json 数组的单个元素转换为实体然后装入list 解决方案二: 把json数据解析成一个实体,然后装入集合

visual studio-dll工程添加json.lib出错

问题描述 dll工程添加json.lib出错 dll工程中添加了a.h以及a.cpp,实现一些导出类以及导出函数的相关功能,我要使用json协议,代码如下: a.cpp如下:#include "StdAfx.h" #include "Date.h" #include #include using namespace std; #ifdef DEBUG #undef THIS_FILE static char THIS_FILE[]=_FILE__; #define

大神帮忙解答一下这个json数据怎么在java里用json lib解析存放到List里

问题描述 大神帮忙解答一下这个json数据怎么在java里用json lib解析存放到List里 [ { "city": "", "citys": [ { "city": "北京", "id": 2, "level": 2, "province": "北京", "seq": 0, "x":