JSON实现前后台传输

JSON详解
所需jar包以及实例代码下载地址:链接:http://pan.baidu.com/s/1hrDMsp2 密码:417t
一、Json基础
(1)、JSON格式:
表示名称 / 值对
   按照最简单的形式,可以用下面这样的 JSON 表示 "名称 / 值对" : { "firstName": "Brett" }

这个示例非常基本,而且实际上比等效的纯文本 "名称 / 值对" 占用更多的空间:firstName=Brett

但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }

从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

表示数组
   当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的 名称 / 值 对(就像在本系列前面文章中看到的那种名称 / 值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName这样的形式。
如果使用 JSON,就只需将多个带花括号的记录分组在一起:

{ "people": [

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},

{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

]}
(2)后台编写JSON代码所需要的jar包


(3)、JSON的优缺点
     优点:
     对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。相对于XML,它更加易读、更便于肉眼检查。在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。
     缺点:
   和许多好东西都具有两面性一样,JSON的非冗长性也不例外,为此JSON丢失了XML具有的一些特性。命名空间允许不同上下文中的相同的信息段彼此混合,然而,显然在JSON中已经找不到了命名空间。JSON与XML的另一个差别是属性的差异,由于JSON采用冒号赋值,这将导致当XML转化为JSON时,在标识符(XML CDATA)与实际属性值之间很难区分谁应该被当作文本考虑。 
二、其他类型数据转JSON格式
 (1)、List转JSON
 下面代码可以当做工具方法,传入的list的类型给定义了<T>泛型,理论上可以传入任何类型的集合类型,包括下面要说的实体类和Map也都可以eg:List<Map>、List<JavaBean>
     /**
      * list转换成JSONArray,传入的list集合可以是任何类型的。
      *
      * @param list
      *            :传入的list可以是任何类型的集合,集合类型的实体类也能传入
      * @return JSONArray
      */
     public static <T> JSONArray listToJson(List<T> list) {
           JSONArray ja = JSONArray.fromObject(list);
           return ja;
     }


(2)、实体类转JSON
/**
      * 实体类转换成JSON
      *
      * @param t
      *            实体类
      * @return JSONObject
      */
     public static <T> JSONObject beanToJson(T t) {
           JSONObject jsonObject = JSONObject.fromObject(t);
           return jsonObject;
     }


(3)Map转JSON

/**
      * Map 转换成Json
      *
      * @param map
      * @return JSONObject
      */
     public static JSONObject mapToJson(Map<String, Object> map) {
           JSONObject json = JSONObject.fromObject(map);
           return json;
     }



三、 JSON前后带数据传输(实例代码所用的框架是SSM,参考链接: http://blog.csdn.net/m0_37027631/article/details/53611198
(1)后台向前台传值以及前台接收的方法
  前台采用的是ajax回调后台相应json格式字符串的方式。

function jsonTest(){
     /*1、dataType : 'json',将后台获取的json格式字符串转换成了json格式数据,因此前台不需要再做转换 ,直接data.key就可以得到相应的value
       2、通过ajax回调的方法一定不能是放回一个jsp,小白之前办过这么蠢的事,返回了一个jsp页面结果就是获取不到任何值也不报任何错误。
       3、
     */
     debugger;
     jQuery.ajax({
           url:'<%=request.getContextPath()%>/javalearn/json',
           method : 'POST',
           dataType : 'json',
           success : function(data) {
                alert(data.message);
           }
           
     });
}


后台代码:
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import net.sf.json.JSONObject;
/**
 * 后台json学习代码
 * 知识点
 * 1、后台List,实体类、Map转Json格式,参考文章前几节
 * 2、@RequestMapping(value = "/json", produces = "application/json;charset=utf-8")
 * 注解中解决后台向前台传值中文乱码 ,方法返回的是json格式的字符串,如果返回的是个jsp页面则需要在方法中添加 resp.setContentType("text/html;charset=utf-8");代码即可。            
 * @author lyd
 *
 */
@Controller
@RequestMapping(value = "/javalearn")
public class JavaLearnController {
     /**
      *
      * @param req
      * @param resp
      * @return   json格式的字符串
      */
     @RequestMapping(value = "/json", produces = "application/json;charset=utf-8")
     @ResponseBody
     public String jsonLearn(HttpServletRequest req, HttpServletResponse resp) {         
            // resp.setContentType("text/html;charset=utf-8");           
           Map<String, Object> map = new HashMap<String, Object>();
           map.put("success", true);
           map.put("message", "操作成功!");
           JSONObject jsonObject = JSONObject.fromObject(map);
           return jsonObject.toString();
     }
}



运行结果:

如果没有定义dataType:'json'可以使用JSON.parse()对json格式的字符串进行解析
(2)、前台向后台传输
前台的json需要转化成字符串传输到后台,然后后台将接收的字符串再转换成json就可以。传输字符串的话比较简单,小白就不多说了。后台解析json格式的字符串代码如下
 
   

String jsonStr=request.getParameter("happy");
JSONArray json=JSONArray.fromObject(jsonStr);


发布了42 篇原创文章 · 获赞 32 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/m0_37027631/article/details/77676203