1 java解析json串
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
String jsonResult= {"count":"279678", "page":"24","info":[ { "id":"100001790666", "title":"供应MP4"} ,{ "id":"100001790667", "title":"供应mp3"} ] }
//解析json串
JSONObject jsonobj=JSONObject.fromObject(jsonResult);
//字符串
String count=jsonobj.get("count").toString();
//数组
JSONArray array = jsonobj.getJSONArray("info");
for (int k = 0; k < array.size(); k++) {
JSONObject jsonobj = JSONObject.fromObject(array.getString(k));
String id=jsonobj.get("id").toString();
String title = (String) jsonobj.get("title");
}
2 List转json串(数组)
import net.sf.json.JSONSerializer;
List<String> list=xxx;
String data =JSONSerializer.toJSON(list).toString(); //["中厚板","锅炉管","合金钢"]
runData.getResponse().setContentType("application/json;charset=gbk");//或utf8
PrintWriter pw = runData.getResponse().getWriter();
pw.print(data);
pw.close();
jQuery.ajax({ type: "POST", url: url, dataType:"json", data: "industryId="+industryId, success: function(data){ //data:Array[3] for(var i=0;i<data.length;i++){ var supcat=data[i]; } } });
3 java后台拼接的json串
//java后台拼接的json串
String result= "{\"searchTotal\":\""+searchTotal+"\",\"keyword\":\""+keywords+"\"}";
HttpServletResponse theRes=data.getResponse();
theRes.setCharacterEncoding("gbk");
theRes.setContentType("text/xml");
theRes.getWriter().write(result);
theRes.getWriter().close();
jQuery.ajax({ type: "POST", url: url, dataType:"json", success: function(obj){ var total=obj.searchTotal; var keyword=obj.keyword; },error: function(xhr,status,errMsg){ } })
注:如果不使用jquery(dataType:"json") ,用js需要var jsonobj=eval('('+obj+')');
为什么要 eval这里要添加'('+obj+')'呢?
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
4 jsonp
跨域需要使用,ajax可以使用firebug控制台运行,看页面变化来测试代码。
String callback = request.getParameter("callback");
String data = JSONSerializer.toJSON(list).toString();
response.setContentType("application/json;charset=gbk");
PrintWriter pw = response.getWriter();
if(callback != null){
pw.print(callback+"("+data+")");
}else{
pw.print(data);
}
pw.close();
var url = "http:xxx?callback=?"; var industryId=jQuery("#industryId").val(); jQuery.ajax({ type: "get", //post url: url, dataType:"jsonp", //contentType: "application/x-www-form-urlencoded; charset=utf-8", //timeout:2000, data: "industryId="+industryId, success: function(data){ if(data!=null){ { var html=""; for(var i=0;i<data.length;i++){ var supcatName=data[i].supcatName; } } jQuery("#moreSupcat ul").html(html); } });
附件有jar包