Hibernate的List转换成json,大家的呢?

LoginOut 2009-10-22 01:31:13

public void testQueryNoXml() {
Session session = HibernateSessionFactory.getSession();
JSONArray array = new JSONArray();
try {
List list = session
.createSQLQuery(
"select cardid,cardreaderid,mapid,stayinterval from v_locatedata")
.setFirstResult(0)
.setMaxResults(10)
.list();
for (int i = 0; i < list.size(); i++) {
Object[] obj = (Object[]) list.get(i);
JSONObject row = new JSONObject();
row.put("cid", obj[0]);
row.put("crid", obj[1]);
row.put("mid", obj[2]);
row.put("stl", obj[3]);
array.add(row);
}
JSONObject json = new JSONObject();
json.put("rowcount", list.size());
json.put("rows", array);
System.out.println("sb.tostring: " + json);
} catch (RuntimeException re) {
log.error("==converse json failed==", re);
} finally {
session.close();
}
}


输出:

sb.tostring: {"rowcount":10,"rows":[{"cid":10352,"crid":17,"mid":1,"stl":"0天00:00:17"},{"cid":10583,"crid":3,"mid":1,"stl":"0天00:00:17"},{"cid":10783,"crid":17,"mid":1,"stl":"0天00:00:51"},{"cid":10913,"crid":3,"mid":1,"stl":"0天00:00:17"},{"cid":10352,"crid":17,"mid":1,"stl":"0天00:00:34"},{"cid":10583,"crid":17,"mid":1,"stl":"0天00:00:34"},{"cid":10913,"crid":17,"mid":1,"stl":"0天00:00:34"},{"cid":10352,"crid":17,"mid":1,"stl":"0天00:02:50"},{"cid":10583,"crid":17,"mid":1,"stl":"0天00:02:50"},{"cid":10783,"crid":17,"mid":1,"stl":"0天00:03:07"}]}


请问大家是如何处理的呢?
...全文
594 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearKin 2009-10-23
  • 打赏
  • 举报
回复
总感觉用json传那么多数据不太好..
lovezx1028 2009-10-23
  • 打赏
  • 举报
回复
学习啦。。
gukuitian 2009-10-22
  • 打赏
  • 举报
回复
雏形,嵌套集合可加递归

import java.lang.reflect.*;
import java.util.*;

class ListToJson{

public static void main(String[] args) throws Exception
{
// System.out.println(Class.forName("ttt").getDeclaredFields()[0].getModifiers());
List list=new ArrayList();
list.add(new ttt());
list.add(new ttt());
list.add(new ttt());
toJson(list);
}

public static String toJson(List list) throws Exception
{
StringBuffer result=new StringBuffer();
if(list==null && list.size()==0)
{
return result.toString();
}
Object obj=list.get(0);
Method[] method=obj.getClass().getDeclaredMethods();

result.append("[");
for(int i=0;i<list.size();i++)
{
obj=list.get(i);
result.append("{");
for(int j=0;j<method.length;j++)
{
if(method[j].getName().startsWith("get"))
{
result.append(toFieldName(method[j].getName()));
result.append(":");
result.append(method[j].invoke(obj));
result.append(",");
}
}
result.deleteCharAt(result.length()-1);
result.append("}");
}
result.append("]");
System.out.println(result.toString());
return result.toString();
}

public static String toFieldName(String methodName)
{
String result="";
result+=(char)(methodName.charAt(3)+32);
for(int i=4;i<methodName.length();i++)
{
result+=methodName.charAt(i);
}
return result;
}
}
class ttt
{
public String a="tt";
private int b;
public String getA() {
return a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public void setA(String a) {
this.a = a;
}

}
goosman 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jwtigerqwe 的回复:]
3楼
把代码弄上来 让我们学习下
思路很帅
[/Quote]

呵呵, 最近都没有做java的东西了, 环境都没的......抱歉.
wzc_zxy 2009-10-22
  • 打赏
  • 举报
回复
public static String objectToPropertyStringForJSON(Object obj)throws Exception
{
StringBuffer stringValue = new StringBuffer();
Class clazz = obj.getClass();
Map getMethodMap = getGetMethodMap(clazz);
Iterator iter = getMethodMap.keySet().iterator();
stringValue.append(" { ");
while(iter.hasNext())
{
String methodName = iter.next().toString();
Method md = (Method)getMethodMap.get(methodName);
Object value =md.invoke(obj,new Object[]{});
stringValue.append(dropCase(methodName));
stringValue.append(" : '");
stringValue.append(value);
stringValue.append("', ");
}
stringValue.append(" objclass : '");
stringValue.append(obj.getClass());
stringValue.append("'");
stringValue.append(" } ");
return stringValue.toString();
}
这个是我的方法。将pojo改成js可识别的json。如果楼主是list的 可以在函数外面加个循环或者在函数内加个循环。
jwtigerqwe 2009-10-22
  • 打赏
  • 举报
回复
3楼
把代码弄上来 让我们学习下
思路很帅
gukuitian 2009-10-22
  • 打赏
  • 举报
回复
反射写的通用。
LoginOut 2009-10-22
  • 打赏
  • 举报
回复
还有其他的方法吗?
goosman 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bearkin 的回复:]
为啥一定要用什么JSON..
[/Quote]

方便为什么不用呢??
BearKin 2009-10-22
  • 打赏
  • 举报
回复
为啥一定要用什么JSON..
wanli209 2009-10-22
  • 打赏
  • 举报
回复
高科技啊!
goosman 2009-10-22
  • 打赏
  • 举报
回复
写成通用的吧.
没开环境, 说下思路吧.

obj2string(obj):
c = obj的Class对象
fieldList = 获取c的属性列表
propertyList = new ArrayList();
遍历fieldList, 查看是否有对应的get和set方法, 如果有, 认为是property, 加入到propertyList中.
遍历propertyList, 获取每个property对应的json_string

对此, 在性能上可以做一个优化, 在你的整个应用的生命周期内(web程序的applicationContext)建立一个已经支持json解析的缓存, 比如, supportJsonClass = new HashMap<Class, propertyList>(), 缓存的键是该类的Class对象. 对应的值是这种类需要解析的属性列表. 这样你就不用在每次解析之前, 先遍历获取需要输出的属性列表.
dinghun8leech 2009-10-22
  • 打赏
  • 举报
回复
我的是在pojo类中写一套方法,接收一个jsonString,转化为hashMap,然后根据key将对应的值set进对应的字段内,完成后扔给hibernate。
pojo可添加一个有参的构造方法可选,直接将前台得来的jsonString用于实例化一个pojo实例。
也就是说,俺用了硬编码解决此问题。
wangwenhui-com-cn 2009-10-22
  • 打赏
  • 举报
回复
java反射机制。。。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧