javascript
java list对象转json_java中List对象转换为JSON对象
一、什么是JSON
JSON 即 JavaScript Object Natation(Java對象表示法),它是一種輕量級的數據交換格式,非常適合于服務器與 JavaScript 的交互。
簡而言之,JSON就是JavaScript交換數據的一種格式。例子如下:{"username":"coolcooldool","password":"1230","usertype":"superadmin"}{"list":[{"password":"1230","username":"coolcooldool"},{"password":"thisis2","username":"okokok"}]}第二種是有數組的情況,我也不用文字表述JSON到底是怎么構成的了,相信長眼睛的人都看懂了,哇咔咔!~二、為什么使用JSON而不是XML他們都是這樣說的:盡管有許多宣傳關于 XML 如何擁有跨平臺,跨語言的優勢,然而,除非應用于 Web Services,否則,在普通的 Web 應用中,開發者經常為 XML 的解析傷透了腦筋,無論是服務器端生成或處理 XML,還是客戶端用 JavaScript 解析 XML,都常常導致復雜的代碼,極低的開發效率。實際上,對于大多數 Web 應用來說,他們根本不需要復雜的 XML 來傳輸數據,XML 的擴展性很少具有優勢,許多 AJAX 應用甚至直接返回 HTML 片段來構建動態 Web 頁面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系統的復雜性,但同時缺少了一定的靈活性。我認為就是說:解析XML太費勁了。三、如何使用當然最直接的方法就是,你自己寫一個類,把你在數據庫中查到的list轉換成Sting,格式就是JSON樣子的就行,但前提是你比較牛叉,能很快寫出來,并且是對的,對于我這么不牛叉的人來說,我選第二種方法。去網上找別人寫好的類,看一遍,拿過來用就好了。我目前找到了兩個類,都能達到效果,待我慢慢道來。1.在你的MyEclipse里新建一個Web Project,就叫Ajax_Json吧。2.新建一個類,名字叫做JsonUtil.java,打包到young.ajax.json,把下面代碼復制進去。
packageyoung.ajax.json;
importjava.beans.IntrospectionException;
importjava.beans.Introspector;
importjava.beans.PropertyDescriptor;
importjava.math.BigDecimal;
importjava.math.BigInteger;
importjava.util.List;
importjava.util.Map;
importjava.util.Set;
importorg.apache.commons.logging.Log;
importorg.apache.commons.logging.LogFactory;
publicclassJsonUtil?{
privatestaticLog?log?=?LogFactory.getLog(JsonUtil.class);
publicstaticString?object2json(Object?obj)?{
StringBuilder?json?=?newStringBuilder();
if(obj?==null)?{
json.append("\"\"");
}?elseif(objinstanceofString?||?objinstanceofInteger?||?objinstanceofFloat
||?obj?instanceofBoolean?||?objinstanceofShort?||?objinstanceofDouble
||?obj?instanceofLong?||?objinstanceofBigDecimal?||?objinstanceofBigInteger
||?obj?instanceofByte)?{
json.append("\"").append(string2json(obj.toString())).append("\"");
}?elseif(objinstanceofObject[])?{
json.append(array2json((Object[])?obj));
}?elseif(objinstanceofList)?{
json.append(list2json((List>)?obj));
}?elseif(objinstanceofMap)?{
json.append(map2json((Map,??>)?obj));
}?elseif(objinstanceofSet)?{
json.append(set2json((Set>)?obj));
}?else{
json.append(bean2json(obj));
}
returnjson.toString();
}
publicstaticString?bean2json(Object?bean)?{
StringBuilder?json?=?newStringBuilder();
json.append("{");
PropertyDescriptor[]?props?=?null;
try{
props?=?Introspector.getBeanInfo(bean.getClass(),?Object.class).getPropertyDescriptors();
}?catch(IntrospectionException?e)?{}
if(props?!=null)?{
for(inti?=0;?i?
try{
String?name?=?object2json(props[i].getName());
String?value?=?object2json(props[i].getReadMethod().invoke(bean));
json.append(name);
json.append(":");
json.append(value);
json.append(",");
}?catch(Exception?e)?{}
}
json.setCharAt(json.length()?-?1,'}');
}?else{
json.append("}");
}
returnjson.toString();
}
publicstaticString?list2json(List>?list)?{
StringBuilder?json?=?newStringBuilder();
json.append("[");
if(list?!=null&&?list.size()?>0)?{
for(Object?obj?:?list)?{
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length()?-?1,']');
}?else{
json.append("]");
}
returnjson.toString();
}
publicstaticString?array2json(Object[]?array)?{
StringBuilder?json?=?newStringBuilder();
json.append("[");
if(array?!=null&&?array.length?>0)?{
for(Object?obj?:?array)?{
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length()?-?1,']');
}?else{
json.append("]");
}
returnjson.toString();
}
publicstaticString?map2json(Map,??>?map)?{
StringBuilder?json?=?newStringBuilder();
json.append("{");
if(map?!=null&&?map.size()?>0)?{
for(Object?key?:?map.keySet())?{
json.append(object2json(key));
json.append(":");
json.append(object2json(map.get(key)));
json.append(",");
}
json.setCharAt(json.length()?-?1,'}');
}?else{
json.append("}");
}
returnjson.toString();
}
publicstaticString?set2json(Set>?set)?{
StringBuilder?json?=?newStringBuilder();
json.append("[");
if(set?!=null&&?set.size()?>0)?{
for(Object?obj?:?set)?{
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length()?-?1,']');
}?else{
json.append("]");
}
returnjson.toString();
}
publicstaticString?string2json(String?s)?{
if(s?==null)
return"";
StringBuilder?sb?=?newStringBuilder();
for(inti?=0;?i?
charch?=?s.charAt(i);
switch(ch)?{
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;
case'/':
sb.append("\\/");
break;
default:
if(ch?>='\u0000'&&?ch?<='\u001F')?{
String?ss?=?Integer.toHexString(ch);
sb.append("\\u");
for(intk?=0;?k?<4-?ss.length();?k++)?{
sb.append('0');
}
sb.append(ss.toUpperCase());
}?else{
sb.append(ch);
}
}
}
returnsb.toString();
}
}
這應該是一個高手自己寫的代碼,就是用剛才第一種方法的人,哈哈!這個類就能將你的幾乎所有類型轉換成JSON形式的字符串,你可以自己寫個類測試一下,我就不寫了。
吶,到現在為止,我們已經有一種方法能將list型的東東轉換成為JSON形式的數據了。但是,偷偷的告訴你,還有一種方法,其實效果是一樣的,但是傳說是官方的,所以用了會顯得比較專業,比較牛叉所以我選了第二種,哇咔咔!
packageyoung.ajax.json;import
java.util.HashMap;
importjava.util.List;
importjava.util.Map;
importnet.sf.json.JSONArray;
importnet.sf.json.JSONException;
importnet.sf.json.JSONObject;
publicclassJsonConvert
{publicstaticJSONObject?message(String?message,booleansuccess)
{??????????Map?map?=newHashMap();
map.put("success",?success);
map.put("message",?message);
returnJSONObject.fromObject(map);
publicstaticJSONObject?generate(List?list)
{??????????Map?map?=newHashMap();
map.put("totalProperty",?list.size());
map.put("root",?list);
returnJSONObject.fromObject(map);
publicstaticJSONObject?javabean2json(Object?object,?String?message,booleansuccess)
{??????????Map?map?=newHashMap();
map.put("success",?success);
map.put("message",?message);
map.put("data",?object);
returnJSONObject.fromObject(map);
publicstaticJSONObject?objectcollect2json(List?list,?String?total)?{
Map?map?=newHashMap();
map.put("totalProperty",?total);
map.put("root",?list);
returnJSONObject.fromObject(map);
publicstaticJSONArray?getJSONArrayFormString(String?str)?{
if(str?==null||?str.trim().length()?==0)?{
returnnull;
JSONArray?jsonArray?=null;
jsonArray?=?JSONArray.fromObject(str);
}catch(JSONException?e)?{???????????e.printStackTrace();??????????}
returnjsonArray;?}
publicstaticJSONObject?StringToJSONOBject(String?str)?{
if(str?==null||?str.trim().length()?==0)
{returnnull;??????????}
JSONObject?jsonObject?=null;
try{???????????jsonObject?=?JSONObject.fromObject(str);
}catch(JSONException?e)?{???????????e.printStackTrace();??????????}
returnjsonObject;?}}
3.新建一個Java類,名字叫做JsonConvert.java,同樣打包到young.ajax.json,將下面代碼粘到里面。怎么樣,這個看著更專業吧,但是你現在發現了,有好多的可修正的紅叉叉啊,為什么哩?難道是類庫?Bingo!需要好一大堆包啊。。哎!我觀察了一下,我的里面有這么多包包,不排除有沒用上的哈。看到了嗎?這么多包包,自己去下吧,我就不給出地址了啊。。。本來想用圖片帶rar了,可惜,百度不讓。這些包可以從這些網站找到:如果你實在找不到,沒辦法,留郵箱吧。到這里,轉換的工作就完成了!你同樣可以編寫測試的類測試一下。4.新建一個Java類,名字叫做UserVO.java打包到young.ajax.model,將面面代碼粘到里面。
package young.ajax.model;
public class UserVO {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
感覺這個代碼像高手寫的了嗎?yes你說對了,是我寫的,哈哈!(其實大部分是MyEclipse生成的)
5.新建一個Servlet名字叫做JSONAction.java打包到young.ajax.action,將mapping里的訪問地址改為/json,將下面代碼粘到里面。
package young.ajax.action;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import young.ajax.model.UserVO;
public class JSONAction extends HttpServlet {
public JSONAction() {
super();
}
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("VVVVVVVVV"+request.getParameter("a"));
response.setContentType("application/json;charset=UTF-8");
PrintWriter out = response.getWriter();
List list = new ArrayList();
UserVO vo1 = new UserVO();
vo1.setUsername("coolcooldool");
vo1.setPassword("1230");
list.add(vo1);
UserVO vo2 = new UserVO();
vo2.setUsername("okokok");
vo2.setPassword("thisis2");
list.add(vo2);
Map map = new HashMap();
map.put("list",list);
JSONObject jso = JSONObject.fromObject(map);
System.out.println(jso);
out.print(jso);
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
public void init() throws ServletException {
}
}
6.在你的WebRoot下面新建文件夾js,下載JQuery的支持文件放在里面,你不用知道JQuery,這樣做就可以了,因為做這個的時候我正好也在玩JQuery.7.打開你的index.jsp將下面代碼粘到里面。
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
利用JQuery+Ajax獲取JSON數據$(function(){
$("#load").click(function(){
$("div").toggleClass("myc");
//$.get(
//"json",
//{a:1,b:2},
//function(data){
//alert(data);
//}
//);
$.ajax({
type:"get",url:"json",
data:"a=1&b=2&c=3",
dataType:"json",
success:function(data){
var items=data.list;
for(var i =0;i
{
var item=items[i];
//alert(item.username);
$("#tar").append("用戶名:"+item.username+"
密碼:"+item.password);
};
}
});
});
});
好了,啟動測試,運行效果如下。
總結
以上是生活随笔為你收集整理的java list对象转json_java中List对象转换为JSON对象的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 和redis_Redis 缓存
 - 下一篇: Linux:shell脚本命令: /de