`
thrillerzw
  • 浏览: 139006 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

json/jsonp

    博客分类:
  • java
 
阅读更多

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包

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics