把Bean集合变成Json字符串

lovebin_bin 2010-11-10 04:48:06
List:
List list = new ArrayList();

AjaxTreeBean bean1 = new AjaxTreeBean();
bean1.setId("1");
bean1.setName("json");
bean1.setParent("0");

AjaxTreeBean bean2 = new AjaxTreeBean();
bean2.setId("2");
bean2.setName("java");
bean2.setParent("1");

AjaxTreeBean bean3 = new AjaxTreeBean();
bean3.setId("3");
bean3.setName(".net");
bean3.setParent("1");

AjaxTreeBean bean4 = new AjaxTreeBean();
bean4.setId("4");
bean4.setName("php");
bean4.setParent("11");

AjaxTreeBean bean5 = new AjaxTreeBean();
bean5.setId("5");
bean5.setName("c++");
bean5.setParent("4");

AjaxTreeBean bean6 = new AjaxTreeBean();
bean6.setId("6");
bean6.setName("javascript");
bean6.setParent("5");

list.add(bean1);
list.add(bean2);
list.add(bean3);
list.add(bean4);
list.add(bean5);
list.add(bean6);

return list;
//注:AjaxTreeBean是一个JavaBean对象,AjaxTreeBean中的id,parent是有规律的,就是可以构成一个Tree结构

现在想要的结果:
[{"id":"1","name":"json","parent":"0",nodes[
{"id":"2","name":"java","parent":"1"},
{"id":"3","name":".net","parent":"1"}
]},
{{"id":"4","name":"php","parent":"11",nodes[
{"id":"5","name":"c++","parent":"4",nodes[
{{"id":"6","name":"javascript","parent":"5"}}
]}
]}}
]

大家应该看得出来规律了吧,请不吝赐教,呵呵
在线等,急用...
...全文
355 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzh_me 2010-11-11
  • 打赏
  • 举报
回复
有那种别人写好的工具类,你可以找找的。急用的话就先拿来用,空闲了再仔细读读代码。

比如下面这个,可以看下下面的链接,
http://elf8848.javaeye.com/blog/259312
里面有作者的信息。我贴出的这个代码没有作者信息的注释了。

import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;
import java.util.Set;

/**
*
* JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式 除了字符 ",\,/
* 和一些控制符(\b,\f,\n,\r,\t)需要编码外,其他 Unicode 字符可以直接输出 Object 对象在 JSON 中是用 {}
* 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map<String, Object>,而不是
* Java 的 Class 。注意 Key 只能用 String 表示。
*
*/
public final class JsonUtil {

/**
* 把对象封装为JSON格式
*
* @param o
* 对象
* @return JSON格式
*/
@SuppressWarnings("unchecked")
public static String toJson(final Object o) {
if (o == null) {

return "null";
}
if (o instanceof String) {// String

return string2Json((String) o);
}
if (o instanceof Boolean) { // Boolean

return boolean2Json((Boolean) o);
}
if (o instanceof Number) { // Number

return number2Json((Number) o);
}
if (o instanceof Map) { // Map

return map2Json((Map<String, Object>) o);
}
if (o instanceof Collection) {// List Set

return collection2Json((Collection) o);
}
if (o instanceof Object[]) { // 对象数组

return array2Json((Object[]) o);
}

if (o instanceof int[]) {// 基本类型数组

return intArray2Json((int[]) o);
}
if (o instanceof boolean[]) {// 基本类型数组

return booleanArray2Json((boolean[]) o);
}
if (o instanceof long[]) {// 基本类型数组

return longArray2Json((long[]) o);
}
if (o instanceof float[]) {// 基本类型数组

return floatArray2Json((float[]) o);
}
if (o instanceof double[]) {// 基本类型数组

return doubleArray2Json((double[]) o);
}
if (o instanceof short[]) {// 基本类型数组

return shortArray2Json((short[]) o);
}
if (o instanceof byte[]) {// 基本类型数组

return byteArray2Json((byte[]) o);
}
if (o instanceof Object) {// 保底收尾对象

return object2Json(o);
}

throw new RuntimeException("不支持的类型: " + o.getClass().getName());
}

/**
* 将 String 对象编码为 JSON格式,只需处理好特殊字符
*
* @param s
* String 对象
* @return JSON格式
*/
static String string2Json(final String s) {
final StringBuilder sb = new StringBuilder(s.length() + 20);
sb.append('\"');
for (int i = 0; i < s.length(); i++) {
final char c = s.charAt(i);
switch (c) {
case '\"':
sb.append("\\\"");
break;
case '\\':
sb.append("\\\\");
break;
case '/':
sb.append("\\/");
break;
case '\b':
sb.append("\\b");
break;
case '\f':
sb.append("\\f");
break;
case '\n':
sb.append("\\n");
break;
case '\r':
sb.append("\\r");
break;
case '\t':
sb.append("\\t");
break;
default:
sb.append(c);
}
}
sb.append('\"');
return sb.toString();
}

/**
* 将 Number 表示为 JSON格式
*
* @param number
* Number
* @return JSON格式
*/
static String number2Json(final Number number) {
return number.toString();
}

/**
* 将 Boolean 表示为 JSON格式
*
* @param bool
* Boolean
* @return JSON格式
*/
static String boolean2Json(final Boolean bool) {
return bool.toString();
}

/**
* 将 Collection 编码为 JSON 格式 (List,Set)
*
* @param c
* @return
*/
static String collection2Json(final Collection<Object> c) {
final Object[] arrObj = c.toArray();
return toJson(arrObj);
}

/**
* 将 Map<String, Object> 编码为 JSON 格式
*
* @param map
* @return
*/
static String map2Json(final Map<String, Object> map) {
if (map.isEmpty()) {
return "{}";
}
final StringBuilder sb = new StringBuilder(map.size() << 4); // 4次方
sb.append('{');
final Set<String> keys = map.keySet();
for (final String key : keys) {
final Object value = map.get(key);
sb.append('\"');
sb.append(key); // 不能包含特殊字符
sb.append('\"');
sb.append(':');
sb.append(toJson(value)); // 循环引用的对象会引发无限递归
sb.append(',');
}
// 将最后的 ',' 变为 '}':
sb.setCharAt(sb.length() - 1, '}');
return sb.toString();
}

/**
* 将数组编码为 JSON 格式
*
* @param array
* 数组
* @return JSON 格式
*/
static String array2Json(final Object[] array) {
if (array.length == 0) {
return "[]";
}
final StringBuilder sb = new StringBuilder(array.length << 4); // 4次方
sb.append('[');
for (final Object o : array) {
sb.append(toJson(o));
sb.append(',');
}
// 将最后添加的 ',' 变为 ']':
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}

static String intArray2Json(final int[] array) {
if (array.length == 0) {
return "[]";
}
final StringBuilder sb = new StringBuilder(array.length << 4);
sb.append('[');
for (final int o : array) {
sb.append(Integer.toString(o));
sb.append(',');
}
// set last ',' to ']':
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}

static String longArray2Json(final long[] array) {
if (array.length == 0) {
return "[]";
}
final StringBuilder sb = new StringBuilder(array.length << 4);
sb.append('[');
for (final long o : array) {
sb.append(Long.toString(o));
sb.append(',');
}
// set last ',' to ']':
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}

static String booleanArray2Json(final boolean[] array) {
if (array.length == 0) {
return "[]";
}
final StringBuilder sb = new StringBuilder(array.length << 4);
sb.append('[');
for (final boolean o : array) {
sb.append(Boolean.toString(o));
sb.append(',');
}
// set last ',' to ']':
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}

static String floatArray2Json(final float[] array) {
if (array.length == 0) {
return "[]";
}
final StringBuilder sb = new StringBuilder(array.length << 4);
sb.append('[');
for (final float o : array) {
sb.append(Float.toString(o));
sb.append(',');
}
// set last ',' to ']':
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}

static String doubleArray2Json(final double[] array) {
if (array.length == 0) {
return "[]";
}
final StringBuilder sb = new StringBuilder(array.length << 4);
sb.append('[');
for (final double o : array) {
sb.append(Double.toString(o));
sb.append(',');
}
// set last ',' to ']':
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}

static String shortArray2Json(final short[] array) {
if (array.length == 0) {
return "[]";
}
final StringBuilder sb = new StringBuilder(array.length << 4);
sb.append('[');
for (final short o : array) {
sb.append(Short.toString(o));
sb.append(',');
}
// set last ',' to ']':
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}

static String byteArray2Json(final byte[] array) {
if (array.length == 0) {
return "[]";
}
final StringBuilder sb = new StringBuilder(array.length << 4);
sb.append('[');
for (final byte o : array) {
sb.append(Byte.toString(o));
sb.append(',');
}
// set last ',' to ']':
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}

public static String object2Json(final Object bean) {
// 数据检查
if (bean == null) {
return "{}";
}
final Method[] methods = bean.getClass().getMethods(); // 方法数组
final StringBuilder sb = new StringBuilder(methods.length << 4); // 4次方
sb.append('{');

for (final Method method : methods) {
try {
final String name = method.getName();
String key = "";
if (name.startsWith("get")) {
key = name.substring(3);

// 防死循环
final String[] arrs = { "Class" };
boolean bl = false;
for (final String s : arrs) {
if (s.equals(key)) {
bl = true;
continue;
}
}
if (bl) {
continue; // 防死循环
}
} else if (name.startsWith("is")) {
key = name.substring(2);
}
if (key.length() > 0 && Character.isUpperCase(key.charAt(0))
&& method.getParameterTypes().length == 0) {
if (key.length() == 1) {
key = key.toLowerCase();
} else if (!Character.isUpperCase(key.charAt(1))) {
key = key.substring(0, 1).toLowerCase()
+ key.substring(1);
}
final Object elementObj = method.invoke(bean);

// System.out.println("###" + key + ":" +
// elementObj.toString());

sb.append('\"');
sb.append(key); // 不能包含特殊字符
sb.append('\"');
sb.append(':');
sb.append(toJson(elementObj)); // 循环引用的对象会引发无限递归
sb.append(',');
}
} catch (final Exception e) {
// e.getMessage();
throw new RuntimeException("在将bean封装成JSON格式时异常:"
+ e.getMessage(), e);
}
}
if (sb.length() == 1) {
return bean.toString();
} else {
sb.setCharAt(sb.length() - 1, '}');
return sb.toString();
}
}

private JsonUtil() {
}
}

sotom 2010-11-11
  • 打赏
  • 举报
回复
有专门的java转json的工具包
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
JSONObject jsonObj = new JSONObject();
jsonObj.put("m", map);

jsonObj.put("groupList", groupList);
jsonObj.put("deptList", deptList);

logger.debug("json数据\t" + jsonObj);
out.write(jsonObj.toString());
out.flush();
out.close();
Jlins 2010-11-11
  • 打赏
  • 举报
回复
自己拼接吧...
zn85600301 2010-11-11
  • 打赏
  • 举报
回复
这个只有自己拼串了
不过你在查询的时候可以把顺序排好
拼的时候就好办了,先是根节点后是子节点
WoodLikeWater 2010-11-10
  • 打赏
  • 举报
回复
我现在的项目 也有用到exttree 我就是用 递归遍历树 自己拼接json的 不难的
lovebin_bin 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mytel_789 的回复:]

AjaxTreeBean 中有这个 AjaxTreeBean[] atbs;这个属性吗?

如果有 可以 下载一个json-lib.jar

JSONArray.fromObject(list).toString();
[/Quote]

用了,在写递归这个方法的时候出了问题,输出有误,谢谢。
ansensp 2010-11-10
  • 打赏
  • 举报
回复
AjaxTreeBean 中有这个 AjaxTreeBean[] atbs;这个属性吗?

如果有 可以 下载一个json-lib.jar

JSONArray.fromObject(list).toString();
十橙心橙意 2010-11-10
  • 打赏
  • 举报
回复
晚上回去找找看。
lovebin_bin 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cxj61126 的回复:]

根据id和parent写个递归算法,应该能搞定
[/Quote]

写了,貌似还没有搞定。
cxj61126 2010-11-10
  • 打赏
  • 举报
回复
根据id和parent写个递归算法,应该能搞定
lovebin_bin 2010-11-10
  • 打赏
  • 举报
回复
分不够的话可以加的,谢谢.

67,514

社区成员

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

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