国产69囗曝吞精在线视频,肥臀浪妇太爽了快点再快点,亚洲欧洲成人a∨在线观看,狠狠色丁香久久综合 ,国精一二二产品无人区免费应用,亚洲精品久久久久中文字幕,四虎一区二区成人免费影院网址 ,无码三级中文字幕在线观看

      后臺(tái)返回json數(shù)據(jù)給前臺(tái)和前臺(tái)解析json數(shù)據(jù)(總結(jié))

      2019-9-16    seo達(dá)人

      后臺(tái)返回json數(shù)據(jù)給前臺(tái)和前臺(tái)解析json數(shù)據(jù)(總結(jié))

      一般來(lái)說(shuō)web開(kāi)發(fā)中,前臺(tái)采用json數(shù)據(jù)提交給后臺(tái),后臺(tái)處理數(shù)據(jù)以后返回json數(shù)據(jù)給前臺(tái),前臺(tái)解析json,顯示數(shù)據(jù)。

      總而言之,前后臺(tái)直接交換的數(shù)據(jù)格式最常用的非json數(shù)據(jù)無(wú)疑了。

      這里就總結(jié)一些json數(shù)據(jù)的前后臺(tái)處理方式。



      1.JSON數(shù)據(jù)

      JSON(JavaScript Object Notation, JS 對(duì)象簡(jiǎn)譜)



      是一種輕量級(jí)的數(shù)據(jù)交換格式,比xml更輕巧(由于 JSON 所使用的字符要比 XML 少得多,可以大大得節(jié)約傳輸數(shù)據(jù)所占用的帶寬)。



      json是javascript原生格式,就是說(shuō)在javascript中處理json數(shù)據(jù),需要引用其他API或工具包。



      簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語(yǔ)言。 易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。



      只需要記住!

      Json是一種文本字符串!被存儲(chǔ)在responseText屬性中,而讀取json數(shù)據(jù)可以使用javascript的eval函數(shù)來(lái)解析json。



      2.json規(guī)則:

      在 JS 語(yǔ)言中,一切都是對(duì)象,對(duì)象是一個(gè)無(wú)序的 “鍵/值” 對(duì)集合。

      因此,任何支持的類型都可以通過(guò) JSON 來(lái)表示,例如字符串、數(shù)字、對(duì)象、數(shù)組等。但是對(duì)象和數(shù)組是比較特殊且常用的兩種類型:

      ? 對(duì)象表示為鍵值對(duì).

      ? 數(shù)據(jù)由逗號(hào)分隔.

      ? 花括號(hào){}保存對(duì)象.

      ? 方括號(hào)[]保存數(shù)組.



      鍵/值對(duì)組合中的鍵名寫在前面并用雙引號(hào) “” 包裹,使用冒號(hào) : 分隔,然后緊接著值:



      {"firstName": "Json"}

      1

      這很容易理解,等價(jià)于這條 JavaScript 語(yǔ)句:



      {firstName : "Json"}

      1

      對(duì)象在 JS 中是使用花括號(hào)包裹 {} 起來(lái)的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 {key1:value1, key2:value2, …} 的鍵值對(duì)結(jié)構(gòu)。



      在面向?qū)ο蟮恼Z(yǔ)言中,key 為對(duì)象的屬性,value 為對(duì)應(yīng)的值。



      鍵名可以使用整數(shù)和字符串來(lái)表示,值的類型可以是任意類型。



      數(shù)組在 JS 中是方括號(hào) [] 包裹起來(lái)的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 [“java”, “javascript”, “vb”, …] 的索引結(jié)構(gòu)。



      在 JS 中,數(shù)組是一種比較特殊的數(shù)據(jù)類型,它也可以像對(duì)象那樣使用鍵值對(duì),但還是索引使用得多。同樣,鍵名可以使用整數(shù)和字符串來(lái)表示,值的類型可以是任意類型。



      3.JSON 與 JS 對(duì)象的關(guān)系:

      很多人搞不清楚 JSON 和 Js 對(duì)象的關(guān)系,甚至連誰(shuí)是誰(shuí)都不清楚。其實(shí),可以這么理解:

      JSON 是 JS 對(duì)象的字符串表示法,它使用文本表示一個(gè) JS 對(duì)象的信息,本質(zhì)是一個(gè)字符串。

      如:



      var obj = {a: 'Hello', b: 'World'};    //這是一個(gè)對(duì)象,注意鍵名也是可以使用引號(hào)包裹的

      var json = '{"a": "Hello", "b": "World"}';  //這是一個(gè) JSON 字符串,本質(zhì)是一個(gè)字符串

      1

      2

      4.后臺(tái)返回json數(shù)據(jù)

      一般來(lái)說(shuō),使用JsonObject來(lái)將Java類型數(shù)據(jù)轉(zhuǎn)換成Json類型,首先要下載該庫(kù)相關(guān)的jar包,下載地址如下:



      json-jar包下載



      JsonObject的使用:

      后臺(tái)controller部分代碼:



      JSONObject object = new JSONObject();  //創(chuàng)建Json對(duì)象

      object.put("username", "張三");         //設(shè)置Json對(duì)象的屬性

      object.put("password", "123456");

      System.out.println(object.toString());  //調(diào)用toString方法將json對(duì)象轉(zhuǎn)換成json字符串



      //把json數(shù)據(jù)返回給瀏覽器:

      PrintWriter out = cu.getWriterOut(response);

      out.print(object.toString());

      //或者

      response.getWriter().write(jsonObject.toString());



      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      5.在JavaScript代碼中接收J(rèn)son數(shù)據(jù):

      假設(shè)result為瀏覽器得到的json數(shù)據(jù),可以使用以下js代碼可以將json對(duì)象轉(zhuǎn)換為字符串。



      比如:



      通過(guò)$.get從后臺(tái)獲取了一段json串{“id”:“1”,“name”:“ww”},然后要拿到這里面的id和name值:



      注意!注意!注意!

      如果你直接這么寫!



      $.get(url,

           function(data) {

             alert("ID:" + data.id + "\nName:" + data.name);

           });

      1

      2

      3

      4

      直接這樣寫的話,界面會(huì)alert提示undefined,因?yàn)闆](méi)能正確解析返回的字符串。



      圖示:





      解決方案:



      1、 需要用eval()函數(shù)



      將返回的串轉(zhuǎn)化成可用的strig串,eval(data),但是因?yàn)樵锩媸且詛}開(kāi)始和結(jié)束的,會(huì)被認(rèn)為是可執(zhí)行方法,因此需要加上()包圍起來(lái),最終形成:



      var jsonobj= eval('(' + data + ')');  // 把JSON字符串解析為javascript對(duì)象

      1

      然后再



      alert("ID:" + jsonobj.id + "\nName:" + jsonobj.name);

      1

      各種正常的按key取值,就能正常顯示了。



      2、獲取的時(shí)候就直接表示返回的是json格式,用.getJSON代替 .getJSON代替.getJSON代替.get,其他代碼不變,也能正常獲取。



      也可以直接獲取json對(duì)象的屬性,如下:console.log(result.username);



      前端js代碼:



      $.ajax({

      url: url,

      type: "POST",

      data: parameters,

      dataType:"json",

      async: false,

      success: function(result){

      var newData = JSON.stringify(result);    //將json對(duì)象轉(zhuǎn)換為字符串

      newData = eval("("+newData+")");   /解析json



      var annualDays = newData.annualDays;

      var entryDate = newData.entryDate;



      $("input[name='extendDataFormInfo.value(fd_shengyu_nianjia)']").val(annualDays);

      $("input[name='extendDataFormInfo.value(fd_ruzhi_date)']").val(entryDate);



      }});



      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      ps: 注意注釋中的代碼,如果少了這一句,那么直接alert(result);得到的結(jié)果會(huì)是







      所以在這里stringfy()的作用是用于從一個(gè)對(duì)象解析出字符串

      加上了var newData = JSON.stringify(result);這句,然后你再alert(newData);

      得到的就會(huì)是你想要的結(jié)果,如下:





      另外:

      如果返回的json數(shù)據(jù)格式不是很規(guī)范的解決辦法:



      判斷后臺(tái)返回的數(shù)據(jù)格式是否字符串,是則轉(zhuǎn),不是則不轉(zhuǎn)?



        var $obj = (typeof data.content == 'string') ? JSON.parse(data.content):data.content

      1

      總結(jié):



      前臺(tái)發(fā)送請(qǐng)求,并且設(shè)置數(shù)據(jù)為json格式‘

          $.ajax({

          url:"selectByid.",

          datatype:'json',

          data:{id:id}, // 發(fā)送數(shù)據(jù) 

      1

      2

      3

      4

      數(shù)據(jù)回調(diào)函數(shù)

      success:function(data){

      alert(data);

      var json = eval("("+data+")");//將json類型字符串轉(zhuǎn)換為json對(duì)象

      alert("hjf"+json.name);

      1

      2

      3

      4

      給對(duì)應(yīng)的input賦值:

      $("#id").val(json.id),

      $("#name").val(json.name),

      $("#age").val(json.age);

      1

      2

      3

      后臺(tái)代碼:返回json數(shù)據(jù)

      response.getWriter().print(str);    //將數(shù)據(jù)返回前臺(tái)ajax

      1

      6.前端ajax接不到j(luò)son解決?

      在前臺(tái):



      async:false,                //加上這個(gè)屬性就好了

      1

      7.返回的json字符串中有轉(zhuǎn)義符解決?

      比如:



      "result":"{\"id\":\"60\",\"qid\":\"1\",\"bazi\":\"baiz\",\"shenxiao\":\"\",\"xingzuo\":\"\",\"wuge\":\"\",\"jianyi\":\"\",}"

      1

      這樣我們我們使用JSON.parse(result) ,直接轉(zhuǎn)化為json的話是會(huì)報(bào)錯(cuò)的。



      解決方法:

      我們先把轉(zhuǎn)義符用正則表達(dá)式去掉,



         var string = result.replace("/\","");

         var getDataArray = JSON.parse(string)

      1

      2

      這樣就OK了,不過(guò)要注意有時(shí)候也是需要指定返回?cái)?shù)據(jù)類型的

      dataType:“json”



      8.使用其他的json依賴包方式:

      引入阿里巴巴的json依賴包:



          <dependency>

           <groupId>com.alibaba</groupId>

           <artifactId>fastjson</artifactId>

           <version>1.2.9</version>

          </dependency>

      1

      2

      3

      4

      5

      模擬后臺(tái):



          String params="{\"channelCode\":\"bbb\",\"accountNo\":\"121300000932\",\"message\":\"字符信息解密成功\",\"status\":\"1\"}";

          JSONObject pa=JSONObject.parseObject(params);

          System.out.println(pa.getString("message"));

      1

      2

      3

      結(jié)果:





      或者:

      引入net.sf.json-lib依賴包:



          <dependency>

            <groupId>net.sf.json-lib</groupId>

            <artifactId>json-lib</artifactId>

            <version>2.4</version>  

            <classifier>jdk15</classifier>

          </dependency>

      1

      2

      3

      4

      5

      6

      后臺(tái):



      String params="{\"channelCode\":\"ccy\",\"accountNo\":\"121300000932\",\"message\":\"字符信息解密成功\",\"status\":\"1\"}";

      JSONObject pa=JSONObject.fromObject(params);

      String accountNo=pa.getString("accountNo");

      System.out.println(accountNo);

      1

      2

      3

      4

      結(jié)果:





      9.后臺(tái)對(duì)象轉(zhuǎn)換json數(shù)據(jù)返回給前臺(tái)

      List集合轉(zhuǎn)換成json代碼:



      List list = new ArrayList();

      list.add( "first" );

      list.add( "second" );

      JSONArray jsonArray2 = JSONArray.fromObject( list );

      1

      2

      3

      4

      Map集合轉(zhuǎn)換成json代碼:



        Map map = new HashMap();

      map.put("name", "json");

      map.put("bool", Boolean.TRUE);

      map.put("int", new Integer(1));

      map.put("arr", new String[] { "a", "b" });

      map.put("func", "function(i){ return this.arr[i]; }");

      JSONObject json = JSONObject.fromObject(map);

      1

      2

      3

      4

      5

      6

      7

      或者在項(xiàng)目中加入引入JSON-lib包,JSON-lib包同時(shí)依賴于以下的JAR包:

      下載地址。



        1.commons-lang.jar

        2.commons-beanutils.jar

        3.commons-collections.jar

        4.commons-logging.jar 

        5.ezmorph.jar

        6.json-lib-2.2.2-jdk15.jar

      1

      2

      3

      4

      5

      6

      用法同上



      JSONObject jsonObject = JSONObject.fromObject(message);

      getResponse().getWriter().write(jsonObject.toString());

      1

      2

      當(dāng)把數(shù)據(jù)轉(zhuǎn)為json后,用如上的方法發(fā)送到客戶端。前端就可以取得json數(shù)據(jù)了。(可以參考最下面的實(shí)例)



      10.后臺(tái)返回?cái)?shù)據(jù)給前臺(tái),json中文亂碼解決方法

      在實(shí)際運(yùn)用場(chǎng)景中,當(dāng)前臺(tái)發(fā)起請(qǐng)求后,我們需要從后臺(tái)返回?cái)?shù)據(jù)給前臺(tái),這時(shí),如果返回的數(shù)據(jù)中包含中文,則經(jīng)常會(huì)出現(xiàn)在后臺(tái)查詢出來(lái)都是好好,但是傳輸回去就莫名的亂碼了,而且即使在 web.xml 中進(jìn)行編碼過(guò)濾了,但還是亂碼。



      解決辦法:

      只需要在 spring-mvc.xml 配置文件中配置一次就好,省去了我們重復(fù)寫的麻煩,配置內(nèi)容如下:



      <!--自定義消息轉(zhuǎn)換器的編碼,解決后臺(tái)傳輸json回前臺(tái)時(shí),中文亂碼問(wèn)題-->

          <mvc:annotation-driven >

              <mvc:message-converters register-defaults="true">

                  <bean class="org.springframework.http.converter.StringHttpMessageConverter" >

                      <property name = "supportedMediaTypes">

                          <list>

                              <value>application/json;charset=utf-8</value>

                              <value>text/html;charset=utf-8</value>

                              <!-- application 可以在任意 form 表單里面 enctype 屬性默認(rèn)找到 -->

                              <value>application/x-www-form-urlencoded</value>

                          </list>

                      </property>

                  </bean>

                  <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" ></bean>

              </mvc:message-converters>

          </mvc:annotation-driven>

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      加上這段配置,保存重新運(yùn)行,再次訪問(wèn),會(huì)發(fā)現(xiàn),原先的中文亂碼都已經(jīng)正常顯示了。



      方法二:在后臺(tái)的方法映射添加:



      @RequestMapping(value="/getphone",produces = “text/plain;charset=utf-8”)



      11.Spring MVC返回json數(shù)據(jù)的方式

      1. 采用@ResponseBody注解

        @ResponseBody 注解的作用是:



        將controller的方法返回的對(duì)象通過(guò)適當(dāng)?shù)霓D(zhuǎn)換器轉(zhuǎn)換為指定的格式之后,寫入到response對(duì)象的body區(qū),通常用來(lái)返回JSON數(shù)據(jù)或者是XML數(shù)據(jù),需要注意的呢,在使用此注解之后不會(huì)再走試圖處理器,而是直接將數(shù)據(jù)寫入到輸入流中,他的效果等同于通過(guò)response對(duì)象輸出指定格式的數(shù)據(jù)。



        使用舉例:





        使用@ResponseBody 注解返回響應(yīng)體 直接將返回值序列化json

        優(yōu)點(diǎn):不需要自己再處理



        再舉例:



        RequestMapping("/login")

        @ResponseBody

        public User login(User user){

        return user;

        }

        1

        2

        3

        4

        5

        使用@ResponseBody 注解返回響應(yīng)體 直接將返回值序列化json。



        User字段:userName pwd,那么在前臺(tái)接收到的數(shù)據(jù)為:’{“userName”:“xxx”,“pwd”:“xxx”}’,效果等同于如下代碼:



        @RequestMapping("/login")

        public void login(User user, HttpServletResponse response){

        response.getWriter.write(JSONObject.fromObject(user).toString());

        }



        1

        2

        3

        4

        5

        需要在springmvc的配置文件xml中添加:



        <mvc:annotation-driven/>  

        1
      2. 采用工具類,進(jìn)行json格式轉(zhuǎn)換帶回

        JSON-lib包是一個(gè)beans,collections,maps,java arrays 和XML和JSON互相轉(zhuǎn)換的包。在本例中,我們將使用JSONObject類創(chuàng)建JSONObject對(duì)象,然后我們打印這些對(duì)象的值。為了使用JSONObject對(duì)象,我們要引入"net.sf.json"包。為了給對(duì)象添加元素,我們要使用put()方法。



        要使程序可以運(yùn)行必須引入JSON-lib包,JSON-lib包同時(shí)依賴于以下的JAR包:



        commons-lang.jar

        commons-beanutils.jar

        commons-collections.jar

        commons-logging.jar 

        ezmorph.jar

        json-lib-2.2.2-jdk15.jar

        1

        2

        3

        4

        5

        6

        效果:



        工具類:

        ResponseUtil.java



        package com.zout.utils;

        import java.io.PrintWriter;

        import javax.servlet.http.HttpServletResponse;

        import net.sf.json.JSONArray;

        import net.sf.json.JSONObject;



        /*

         
        @class_name:ResponseUtil  

         @param: EasyUi-響應(yīng)工具類

         
        @return: 返回字符串格式數(shù)據(jù)、result是JSONObject對(duì)象(json對(duì)象)

         @author:Zoutao

         
        @createtime:2018年3月8日

         /

        public class ResponseUtil {

        public static void write(HttpServletResponse response, Object result)

        throws Exception {

        response.setContentType("text/html;charset=utf-8");

        response.addHeader("Access-Control-Allow-Origin", "
        ");

        PrintWriter out = response.getWriter();

        out.println(result.toString());

        System.out.println("帶回的json字符串為:"+result.toString()+"類型為:"+result.getClass().getName());

        out.flush();

        out.close();

        }



        public static void main(String[] args) throws Exception {

        /在web運(yùn)用控制層中調(diào)用如下:/

        JSONObject result = new JSONObject(); //創(chuàng)建json對(duì)象

        JSONArray jsonArray = JSONArray.fromObject("name:zhangsan"); //字符串轉(zhuǎn)為json數(shù)組

        result.put("rows", jsonArray);  //放入json數(shù)組中,并起個(gè)名字

        HttpServletResponse response = null; //jsp的response對(duì)象

        ResponseUtil.write(response, result); //result寫入response帶回前臺(tái),jsp按名字拿取。

        }

        }



        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        12

        13

        14

        15

        16

        17

        18

        19

        20

        21

        22

        23

        24

        25

        26

        27

        28

        29

        30

        31

        32

        33

        34

        35

        后臺(tái)具體調(diào)用:



        JSONObject result = new JSONObject();

        if (resultTotal > 0) { //處理結(jié)果

        System.out.println("操作成功。");

        result.put("success",true)

        result.put("message","操作成功"); //消息語(yǔ)句

        } else {

        System.out.println("操作失敗。");

        result.put("success", false);

        result.put("message","操作失敗");

        }

        ResponseUtil.write(response,result); //帶回字符串+狀態(tài)碼

        return null;

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        12

        圖:





        后臺(tái)已經(jīng)通過(guò)工具類封裝為json字符串了,使用response帶回需要的數(shù)據(jù),使用result帶回狀態(tài)字符串或狀態(tài)碼。



        前臺(tái):

        這是當(dāng)成返回一個(gè)json字符串,然后直接采取字符串截取的方式,取出消息語(yǔ)句message等消息。





        這是另外一種寫法:就是解析傳回來(lái)的json字符串我js的對(duì)象,然后按照key/value的取值。



          function (data) {

                  var data=eval("("+data+")");  //解析json

                 //alert(data.message)

                    $.messager.show({

                      title:'消息',

                      msg:data.message,  //按key取值

                      timeout:1000,

                      showType:'slide',

                      height:120,

                     width:200

             });

         });

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        12

        推薦這種方式。

        效果圖:





        以上都是后臺(tái)返回json數(shù)據(jù)給前臺(tái)和前臺(tái)解析json數(shù)據(jù)的一些總結(jié),還有json數(shù)據(jù)的封裝,工具類的使用等等,東西有點(diǎn)復(fù)雜有點(diǎn)多,挑選自己需要的地方即可。

        另外的一些常用的web開(kāi)發(fā)json:



        Json–Java數(shù)據(jù)類型對(duì)照表(映射)表


      日歷

      鏈接

      個(gè)人資料

      存檔

      主站蜘蛛池模板: 国产精品粉嫩| h无码动漫在线观看| 亚洲色图15p| 青草99| 福利cosplayh裸体の福利| 少妇高潮喷水正在播放| 日韩精品一区二区三区四区| 午夜精品福利一区二区| 欧美另类videossexo高潮| 免费爆乳精品一区二区| 欧美性受xxxx| 污视频免费在线| 久久精品人成免费| 116少妇做爰毛片| 国产一区欧美| 另类视频一区| 美女扒开奶罩露出奶头视频网站| 日韩av一中美av一中文字慕| 无码人妻aⅴ一区二区三区有奶水| 成人国产精品久久| 人人澡 人人澡 人人看| 国产xxxx69真实实拍| 91福利在线视频| 午夜影院日本| 国产乱色精品成人免费视频| 免费午夜无码视频在线观看| 中文字幕人妻丝袜乱一区三区| 亚洲最大福利网站| 亚洲色欲色欲天天天www| 成 人 黄 色 大片| www.操操操| 神马午夜在线观看| 亚洲精品理论电影在线观看| 成人亚洲欧美一区二区三区| 欧美激情视频一区| 色婷婷国产精品| 丰满人妻熟妇乱又伦精品视| 欧乱色国产精品兔费视频| 国语对白做受按摩的注意事项| 欧美激情校园春色| 久久热这里只有精品99|