public static String encodeList(Object[] objs) { return encodeList(Arrays.asList(objs)); } @SuppressWarnings("unchecked") public static String encodeList(Collection objs) { JSONArray list = new JSONArray(); if (objs == null || objs.size() == 0) return list.toString(); for (Object ae : objs) { list.add(ae); } return list.toString(); }
@SuppressWarnings("unchecked") public static String encodeObject(Object obj){ if(obj instanceof Collection) return encodeList((Collection)obj); JSONObject jo = JSONObject.fromObject(obj); return jo.toString(); }
@SuppressWarnings("unchecked") public static <T>List<T> decodeList(String str, Class<T> clazz) { if (str == null || "".equals(str)) return null; JSONArray obj = JSONArray.fromObject(str); Object[] rts = obj.toArray(); List<T> result = new ArrayList<T>(rts.length); for (int i = 0; i < rts.length; i++) { Object jo = rts[i]; T ele = (T)JSONObject.toBean((JSONObject) jo, clazz); result.add( ele ); } return result; }
com.competence.querycompetence.pojo.QueryCompetence@1da931b,
com.competence.querycompetence.pojo.QueryCompetence@f00e0f,
com.competence.querycompetence.pojo.QueryCompetence@2b2c81]}这个字符串很明显是调用的List对象的toString()方法返回的一个字符串,并且在[]这个里面是那些对象的地址,而不是楼主需要的数据
1 自己去写代码一个一个拆开,拼字符串。
2 用jsonlib包里的工具类和方法转换。
{"name":"地市权限", "id":"ds","pid":"", expanded: true},
{"name":"广州", "id":"gz", "pid": "ds"},
{"name":"中山","id":"zs", "pid": "ds"},
{"name":"清远", "id":"qy", "pid": "ds"}
]
public class A{
String name;
String id;
String pid;
String expanded;
都加上set和get
}
之后把对象放到list里 ,之后把list转成json 就是你要的格式了
import java.util.Arrays;
import java.util.Collection;
import java.util.List;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;public class JsonUtils {
public static String encodeList(Object[] objs) {
return encodeList(Arrays.asList(objs));
} @SuppressWarnings("unchecked")
public static String encodeList(Collection objs) {
JSONArray list = new JSONArray();
if (objs == null || objs.size() == 0)
return list.toString();
for (Object ae : objs) {
list.add(ae);
}
return list.toString();
}
@SuppressWarnings("unchecked")
public static String encodeObject(Object obj){
if(obj instanceof Collection)
return encodeList((Collection)obj);
JSONObject jo = JSONObject.fromObject(obj);
return jo.toString();
}
@SuppressWarnings("unchecked")
public static <T>List<T> decodeList(String str, Class<T> clazz) {
if (str == null || "".equals(str))
return null;
JSONArray obj = JSONArray.fromObject(str);
Object[] rts = obj.toArray();
List<T> result = new ArrayList<T>(rts.length);
for (int i = 0; i < rts.length; i++) {
Object jo = rts[i];
T ele = (T)JSONObject.toBean((JSONObject) jo, clazz);
result.add( ele );
}
return result;
}
@SuppressWarnings("unchecked")
public static <T>T decodeObject(String json,Class<T> clz){
JSONObject jsonObject = JSONObject.fromObject(json);
T bean = (T) JSONObject.toBean(jsonObject, clz);
return bean;
}
}
集合转成json的方法
<action name="queryCompetenceByPage" class="com.competence.querycompetence.command.QueryCompetenceCommand" method="queryCompetenceByPage">
<result type="json" />
</action>
如果返回的是json类型,strurs2会自动转换成json类型,而我需要返回{data=[我需要的数据]}里面的[],所以只需要在starts2里面配置一下就行,配置代码如下:<action name="queryCompetenceByPage" class="com.competence.querycompetence.command.QueryCompetenceCommand" method="queryCompetenceByPage">
<result type="json" >
<param name="root">data</param>
</result>
</action>