`

对于复杂javabean到json串的转换,建议使用FlexJSON

阅读更多
gt-grid自带的那个 javaBean与json的转换工具 能力比较弱
是从官方的参考实现中提取出来的


你可以使用 更强大的 转换json的工具来实现你的需求
http://www.json.org/ 这个页面下面有列表


对于复杂的 json对象的转换 建议大家使用 json-lib 或者是 我此次将要隆重推荐的

FlexJSON .

http://flexjson.sourceforge.net/

很好很强大 喜欢他的api风格(不过也有人讨厌这种风格 呵呵)

举个小例子 : 一个这样的Person类


Person p = ...load a person...;

//将person序列化 同时序列化复杂属性 addresses,但是不序列化"phoneNumbers"
return new JSONSerializer().include("addresses").serialize(p);

// or

//将person序列化 同时序列化 复杂属性 addresses和phoneNumbers
// 同时对 addresses内的复杂属性zipcode 也进行序列化(这是和上面例子的主要区别)
return  new JSONSerializer().include("phoneNumbers", "addresses.zipcode").serialize(p);





更多的信息 大家看官网的示例 就能理解.





分享到:
评论
24 楼 qbo4_535 2008-12-06  
为什么我再用的时候去序列一个list怎么就不行那,list中放的是自己定义的对象
23 楼 shanlingyunjavafuns 2008-10-27  
我也来看一下
22 楼 binn.zeng 2008-10-26  
这类东西好像有很多开源的东西用的...
21 楼 fins 2008-10-24  
Leapiny 写道

想用FlexJSON 代替json-lib 的但发现FlexJSON不带 json to javabean功能。

这个确实弱了些 那还是考虑用 json-lib吧

cucumber 写道

楼主的类图是用什么软件画的啊???

这个图不是我画的啊 呵呵
是官网提供的
20 楼 cucumber 2008-10-24  
楼主的类图是用什么软件画的啊???
19 楼 Leapiny 2008-10-24  
想用FlexJSON 代替json-lib 的但发现FlexJSON不带 json to javabean功能。
18 楼 icewubin 2008-10-21  
zhaobohao 写道


我现在搞一堆多对多的东西,写起来省力.但是看后台查询语句的时候,那叫一个惨!!!,看来,也只能多写点代码,把N+1的问题解决 掉...本来打算省点力气...


对呀,抓数据出现不能优化的不合理,就是UI需求出问题了。
17 楼 woaiwofengkuang 2008-10-20  
fins 写道
有时间我是要写一个
因为 这个软件其实也是有一些bug的 而且 必须要jdk1.5

icewubin 写道



Java代码

include("phoneNumbers", "addresses.zipcode")  include("phoneNumbers", "addresses.zipcode")一年前我也写了个很简陋的,稍稍扩展了JSON-lib,虽然参数格式不太一样,意思是一样的,fins你自己大可扩展一下,没什么难度的,就是个递归,每次把当前参数去除第一层就行了。 比如第一层参数是


Java代码

"phoneNumbers", "addresses.zipcode"  "phoneNumbers", "addresses.zipcode"数据结构随便了,List、array都可以。 当递归到addresses的时候,写个很多简单的工具类,把上述参数变成


Java代码

"zipcode"  "zipcode"然后递归调用


Java代码

new JSONSerializer().include("zipcode").serialize(addresses)  new JSONSerializer().include("zipcode").serialize(addresses)简单吧,只要有思路,实现起来就很简单了。


16 楼 zhaobohao 2008-10-20  


引用

你说的Lazyloading要根据情况来的,比如要预先加载多对一的address对象,写HQL的时候就要预先JOIN address表(如果join比N+1慢的话就不不要这样了,N=每页的数据量),这样带上“address”参数就不会触发N+1查询问题。

一对多另说了,甚至于我认为在List中的单个元素的一对多序列化的需求是不合理的,UI设计必须调整。

就是因为“简陋”、“有很多约定”,所以就不发给大家,发了也没人看得懂啊,呵呵。还是建议其他人根据自己的项目特点自己实现,这样自己有其他需求,改起来也得心应手。我写的东西配合我们自己的框架很好用,给别人就未必合适,比如用iBatis的用户就完全没必考虑序列化的时候产生的延迟加载问题。



我现在搞一堆多对多的东西,写起来省力.但是看后台查询语句的时候,那叫一个惨!!!,看来,也只能多写点代码,把N+1的问题解决 掉...本来打算省点力气...
15 楼 icewubin 2008-10-20  
zhaobohao 写道

吴斌,你也天天在上面呀,你这个东西,我天天在用,还改了不少地方,确实很好用.就是lazyloading的时候,比较累人.

有人需要的话,可以发给大家.留个地址先...东西比较多,有很多约定.


拜托别把我真名四处流传。

你说的Lazyloading要根据情况来的,比如要预先加载多对一的address对象,写HQL的时候就要预先JOIN address表(如果join比N+1慢的话就不不要这样了,N=每页的数据量),这样带上“address”参数就不会触发N+1查询问题。

一对多另说了,甚至于我认为在List中的单个元素的一对多序列化的需求是不合理的,UI设计必须调整。

就是因为“简陋”、“有很多约定”,所以就不发给大家,发了也没人看得懂啊,呵呵。还是建议其他人根据自己的项目特点自己实现,这样自己有其他需求,改起来也得心应手。我写的东西配合我们自己的框架很好用,给别人就未必合适,比如用iBatis的用户就完全没必考虑序列化的时候产生的延迟加载问题。

14 楼 zhaobohao 2008-10-20  
icewubin 写道
include("phoneNumbers", "addresses.zipcode")


一年前我也写了个很简陋的,稍稍扩展了JSON-lib,虽然参数格式不太一样,意思是一样的,fins你自己大可扩展一下,没什么难度的,就是个递归,每次把当前参数去除第一层就行了。

比如第一层参数是
"phoneNumbers", "addresses.zipcode"

数据结构随便了,List、array都可以。

当递归到addresses的时候,写个很多简单的工具类,把上述参数变成

"zipcode"


然后递归调用
new JSONSerializer().include("zipcode").serialize(addresses)


简单吧,只要有思路,实现起来就很简单了。


吴斌,你也天天在上面呀,你这个东西,我天天在用,还改了不少地方,确实很好用.就是lazyloading的时候,比较累人.

有人需要的话,可以发给大家.留个地址先...东西比较多,有很多约定.
13 楼 czwlucky 2008-10-20  
Scriptlet 写道
一般java到json对象的转换如果有双向引用就会出现死循环。这点dwr做的不错,但是json string的格式有些乱。


请问您说的string的格式有些乱指的是什么意思?
12 楼 icewubin 2008-10-20  
Scriptlet 写道
一般java到json对象的转换如果有双向引用就会出现死循环。这点dwr做的不错,但是json string的格式有些乱。


不太喜欢DWR的配置文件的形式。转换的细节用配置不方便,重用性也不好。

尤其是后台是Hibernate的话,要解决性能问题,建议最好自己扩展实现或封装一下JSON-lib,目前没有很好的可以拿来直接用的JSON序列化的框架。
11 楼 Scriptlet 2008-10-20  
一般java到json对象的转换如果有双向引用就会出现死循环。这点dwr做的不错,但是json string的格式有些乱。
10 楼 kimmking 2008-10-19  
我自己写的json序列化,
因为之前我做远程调用框架的时候做了一个xml序列化,已经比较成熟了。
自己改了下,就可以出来json对象。
9 楼 fins 2008-10-19  
有时间我是要写一个
因为 这个软件其实也是有一些bug的 而且 必须要jdk1.5

icewubin 写道



Java代码

include("phoneNumbers", "addresses.zipcode")  include("phoneNumbers", "addresses.zipcode")一年前我也写了个很简陋的,稍稍扩展了JSON-lib,虽然参数格式不太一样,意思是一样的,fins你自己大可扩展一下,没什么难度的,就是个递归,每次把当前参数去除第一层就行了。 比如第一层参数是


Java代码

"phoneNumbers", "addresses.zipcode"  "phoneNumbers", "addresses.zipcode"数据结构随便了,List、array都可以。 当递归到addresses的时候,写个很多简单的工具类,把上述参数变成


Java代码

"zipcode"  "zipcode"然后递归调用


Java代码

new JSONSerializer().include("zipcode").serialize(addresses)  new JSONSerializer().include("zipcode").serialize(addresses)简单吧,只要有思路,实现起来就很简单了。

8 楼 fins 2008-10-19  
feohoo 写道

解决了 在执行函数前使用 document.getElementById("grid1_container").innerHTML=""; 对原来的层的内容进行清空,不知道有无大碍,功能暂时实现


我收到你的 qq信息了
但是没看明白

来这里看 也没看明白你的需求

不过

document.getElementById("grid1_container").innerHTML="";

内存泄露的问题会比较严重

你的意图是不是 就是有两个grid  点击不同的按钮显示不同的grid?

如果是这样 你为什么 不使用 grid显示/隐藏/刷新来做呢?
为什么一定要删除其中一个 再显示另一个呢?
另外 这两个列表为什么不合成一个列表呢? 我看列差不多啊?
数据不一样吗?

等待你的回复
7 楼 icewubin 2008-10-19  
include("phoneNumbers", "addresses.zipcode")


一年前我也写了个很简陋的,稍稍扩展了JSON-lib,虽然参数格式不太一样,意思是一样的,fins你自己大可扩展一下,没什么难度的,就是个递归,每次把当前参数去除第一层就行了。

比如第一层参数是
"phoneNumbers", "addresses.zipcode"

数据结构随便了,List、array都可以。

当递归到addresses的时候,写个很多简单的工具类,把上述参数变成

"zipcode"


然后递归调用
new JSONSerializer().include("zipcode").serialize(addresses)


简单吧,只要有思路,实现起来就很简单了。
6 楼 feohoo 2008-10-19  
解决了
在执行函数前使用
document.getElementById("grid1_container").innerHTML="";
对原来的层的内容进行清空,不知道有无大碍,功能暂时实现
5 楼 feohoo 2008-10-19  

情况如上面所示,两个按钮控制的两个事件(构建GT列表的事件)
两个事件交替重复后的样子,有什么办法解决呢

相关推荐

Global site tag (gtag.js) - Google Analytics