javascript
java list对象转json_java中List对象转换为JSON对象
一、什么是JSON
JSON 即 JavaScript Object Natation(Java對(duì)象表示法),它是一種輕量級(jí)的數(shù)據(jù)交換格式,非常適合于服務(wù)器與 JavaScript 的交互。
簡(jiǎn)而言之,JSON就是JavaScript交換數(shù)據(jù)的一種格式。例子如下:{"username":"coolcooldool","password":"1230","usertype":"superadmin"}{"list":[{"password":"1230","username":"coolcooldool"},{"password":"thisis2","username":"okokok"}]}第二種是有數(shù)組的情況,我也不用文字表述JSON到底是怎么構(gòu)成的了,相信長(zhǎng)眼睛的人都看懂了,哇咔咔!~二、為什么使用JSON而不是XML他們都是這樣說(shuō)的:盡管有許多宣傳關(guān)于 XML 如何擁有跨平臺(tái),跨語(yǔ)言的優(yōu)勢(shì),然而,除非應(yīng)用于 Web Services,否則,在普通的 Web 應(yīng)用中,開(kāi)發(fā)者經(jīng)常為 XML 的解析傷透了腦筋,無(wú)論是服務(wù)器端生成或處理 XML,還是客戶端用 JavaScript 解析 XML,都常常導(dǎo)致復(fù)雜的代碼,極低的開(kāi)發(fā)效率。實(shí)際上,對(duì)于大多數(shù) Web 應(yīng)用來(lái)說(shuō),他們根本不需要復(fù)雜的 XML 來(lái)傳輸數(shù)據(jù),XML 的擴(kuò)展性很少具有優(yōu)勢(shì),許多 AJAX 應(yīng)用甚至直接返回 HTML 片段來(lái)構(gòu)建動(dòng)態(tài) Web 頁(yè)面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系統(tǒng)的復(fù)雜性,但同時(shí)缺少了一定的靈活性。我認(rèn)為就是說(shuō):解析XML太費(fèi)勁了。三、如何使用當(dāng)然最直接的方法就是,你自己寫一個(gè)類,把你在數(shù)據(jù)庫(kù)中查到的list轉(zhuǎn)換成Sting,格式就是JSON樣子的就行,但前提是你比較牛叉,能很快寫出來(lái),并且是對(duì)的,對(duì)于我這么不牛叉的人來(lái)說(shuō),我選第二種方法。去網(wǎng)上找別人寫好的類,看一遍,拿過(guò)來(lái)用就好了。我目前找到了兩個(gè)類,都能達(dá)到效果,待我慢慢道來(lái)。1.在你的MyEclipse里新建一個(gè)Web Project,就叫Ajax_Json吧。2.新建一個(gè)類,名字叫做JsonUtil.java,打包到y(tǒng)oung.ajax.json,把下面代碼復(fù)制進(jìn)去。
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();
}
}
這應(yīng)該是一個(gè)高手自己寫的代碼,就是用剛才第一種方法的人,哈哈!這個(gè)類就能將你的幾乎所有類型轉(zhuǎn)換成JSON形式的字符串,你可以自己寫個(gè)類測(cè)試一下,我就不寫了。
吶,到現(xiàn)在為止,我們已經(jīng)有一種方法能將list型的東東轉(zhuǎn)換成為JSON形式的數(shù)據(jù)了。但是,偷偷的告訴你,還有一種方法,其實(shí)效果是一樣的,但是傳說(shuō)是官方的,所以用了會(huì)顯得比較專業(yè),比較牛叉所以我選了第二種,哇咔咔!
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.新建一個(gè)Java類,名字叫做JsonConvert.java,同樣打包到y(tǒng)oung.ajax.json,將下面代碼粘到里面。怎么樣,這個(gè)看著更專業(yè)吧,但是你現(xiàn)在發(fā)現(xiàn)了,有好多的可修正的紅叉叉啊,為什么哩?難道是類庫(kù)?Bingo!需要好一大堆包啊。。哎!我觀察了一下,我的里面有這么多包包,不排除有沒(méi)用上的哈。看到了嗎?這么多包包,自己去下吧,我就不給出地址了啊。。。本來(lái)想用圖片帶rar了,可惜,百度不讓。這些包可以從這些網(wǎng)站找到:如果你實(shí)在找不到,沒(méi)辦法,留郵箱吧。到這里,轉(zhuǎn)換的工作就完成了!你同樣可以編寫測(cè)試的類測(cè)試一下。4.新建一個(gè)Java類,名字叫做UserVO.java打包到y(tǒng)oung.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;
}
}
感覺(jué)這個(gè)代碼像高手寫的了嗎?yes你說(shuō)對(duì)了,是我寫的,哈哈!(其實(shí)大部分是MyEclipse生成的)
5.新建一個(gè)Servlet名字叫做JSONAction.java打包到y(tǒng)oung.ajax.action,將mapping里的訪問(wèn)地址改為/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,這樣做就可以了,因?yàn)樽鲞@個(gè)的時(shí)候我正好也在玩JQuery.7.打開(kāi)你的index.jsp將下面代碼粘到里面。
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
利用JQuery+Ajax獲取JSON數(shù)據(jù)$(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);
};
}
});
});
});
好了,啟動(dòng)測(cè)試,運(yùn)行效果如下。
總結(jié)
以上是生活随笔為你收集整理的java list对象转json_java中List对象转换为JSON对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 和redis_Redis 缓存
- 下一篇: 新增成功到编制为空bug_36 个JS