对json串的解析 fastjson gson ajax异步刷新

json 是轻量级的传输文本格式,解析简单,支持各种语言
json语法特点:以键值对的形式存储
数据之间用逗号分隔
{}是一个对象
[]是一个数据(集合)
fastjson解析 是阿里出的对json处理

eg: [{“sid”:1 , “sname”:”leif” , “salary”:3000},{“sid”:2 , “sname”:”Suny” , “salary”:4000}]

        String studentJson="{\"uid\":1,\"uname\":\"小彬彬\",\"uproject\":\"Mathmatics\"}";

        //手动解析json,
        //第一个参数是需要解析的json字符串,第二个参数是泛型
        Student student=JSON.parseObject(studentJson, Student.class);
        System.out.println(student.getUid()+"\t"+student.getUname()+"\t"+student.getUproject());

    String jsonArray="[{\"uid\":1,\"uname\":\"小彬彬\",\"uproject\":\"Mathmatics\"}," +
                "{\"uid\":2,\"uname\":\"小小彬\",\"uproject\":\"Mathmatics\"}," +
                "{\"uid\":3,\"uname\":\"小可爱\",\"uproject\":\"Mathmatics\"}]";
        //解析集合
        List list=JSON.parseArray(jsonArray,Student.class);
        for (Student student:list) {
            System.out.println(student.getUid()+"\t"+student.getUname()+"\t"+student.getUproject());
        }
**//把对象改成一个json串**

  String studentJson="{\"uid\":1,\"uname\":\"小彬彬\",\"uproject\":\"Mathmatics\"}";

        Student student=JSON.parseObject(studentJson, Student.class);

        String str=JSON.toJSONString(student);

        System.out.println(str);
**//对象里有对象**
String str="[\n" +
                "    {\n" +
                "        date: \"Sep 18 2016\",\n" +
                "        title: \"御剑飞仙翱于九天\",\n" +
                "        imgSrc: \"/images/post/crab.png\",\n" +
                "        avatar: \"/images/avatar/1.png\",\n" +
                "        content: \"金庸书的一大特点就是朝代越早武功越高,天龙的朝代算是最早的 因此天龙里面的功夫都比其他书里面的厉害,就连降龙十八掌也比射雕三步曲里面的厉害,天龙里面一阳指不是非常厉害,但是到了射雕就是相当强大的功夫了。但是后面几部书里面还是有一些奇人练的一些奇功超越了前人。\",\n" +
                "        reading: \"112\",\n" +
                "        collection: \"96\",\n" +
                "        headImgSrc: \"/images/post/crab.png\",\n" +
                "        author: \"林白衣\",\n" +
                "        dateTime: \"24小时前\",\n" +
                "        detail: \"菊黄蟹正肥,品尝秋之味。徐志摩把“看初花的荻芦”和“到楼外楼吃蟹”并列为秋天来杭州不能错过的风雅之事;用林妹妹的话讲是“螯封嫩玉双双满,壳凸红脂块块香”;在《世说新语》里,晋毕卓更是感叹“右手持酒杯,左手持蟹螯,拍浮酒船中,便足了一生矣。”漫漫人生长路,美食与爱岂可辜负?于是作为一个吃货,突然也很想回味一下属于我的味蕾记忆。记忆中的秋蟹,是家人的味道,弥漫着浓浓的亲情。\\n\\n是谁来自山川湖海,却囿于昼夜,厨房与爱? 是母亲,深思熟虑,聪明耐心。吃蟹前,总会拿出几件工具,煞有介事而乐此不疲。告诉我们螃蟹至寒,需要佐以姜茶以祛寒,在配备的米醋小碟里,亦添入姜丝与紫苏,前者驱寒后者增香。泡好菊花茶,岁月静好,我们静等。\",\n" +
                "        postId: 0,\n" +
                "        music: {\n" +
                "            url: \"http://ws.stream.qqmusic.qq.com/C100003507bR0gDKBm.m4a?fromtag=38\",\n" +
                "            title: \"夜夜夜夜-齐秦\",\n" +
                "            coverImg: \"http://y.gtimg.cn/music/photo_new/T002R150x150M000001TEc6V0kjpVC.jpg?max_age=2592000\"\n" +
                "        }\n" +
                "    },\n" +
                "    {\n" +
                "        title: \"癸花宝典修炼指北\",\n" +
                "        content: \"东方不败以这种武功竟然轻松战败令狐冲、任我行、向问天等众大高手的联手,可见其威力之大,不愧为天下第一的武功!\",\n" +
                "        imgSrc: \"/images/post/bl.png\",\n" +
                "        reading: 62,\n" +
                "        detail: \"东方不败以这种武功竟然轻松战败令狐冲、任我行、向问天等众大高手的联手,可见其威力之大,不愧为天下第一的武功!搜索 2 九阳真经 解释:张无忌练成这种武功,以其力败六大门派中的高手!后来一人单挑少林三大前辈神憎的联手还能打成平手!而且武当、峨嵋两派之所以能成为继少林之后在武林中最有威望的门派,皆因为两大门派的掌门人都炼过部分的九阳真经,武功高深莫测!因此将九阳真经排在第二无可厚非。 3 易筋经 解释:这个应该没意见吧,少林寺至高无尚的武学。 4 侠客岛神功 解释:能够让前往侠客岛的各个英雄豪杰废寝忘食地钻研其中奥秘,并深陷其中难以自拨!最后石破天练成了,在迷糊中竟然轻松击毙两大岛主,可见其威力巨大! 5 六脉神剑 解释:天龙寺的至高武功,段誉练成后凭其轻松击败武功高强的鸠摩智和慕容复,且连武功绝顶身经百战的乔峰都对段家的六脉神剑忌惮三分! 6 九阴真经 解释:一部博大精深的武学秘籍。郭靖、黄蓉、杨过、小龙女、洪七功、欧阳峰、周伯通等各大高手都相继修炼过,皆因此武功大增。其诱惑力令人无法抗拒,欧阳峰更因其变得神智不清,且武功更加诡异莫测! 7 独孤九剑 解释:在剑法中可排\",\n" +
                "        collection: 92,\n" +
                "        dateTime: \"24小时前\",\n" +
                "        headImgSrc: \"/images/post/bl.png\",\n" +
                "        author: \"迷的城\",\n" +
                "        date: \"Nov 20 2016\",\n" +
                "        avatar: \"/images/avatar/1.png\",\n" +
                "        postId: 1,\n" +
                "        music: {\n" +
                "            url: \"http://ws.stream.qqmusic.qq.com/C100003GdCmG4NkEOR.m4a?fromtag=38\",\n" +
                "            title: \"鬼迷心窍-李宗盛\",\n" +
                "            coverImg: \"http://y.gtimg.cn/music/photo_new/T002R150x150M000002xOmp62kqSic.jpg?max_age=2592000\"\n" +
                "        }\n" +
                "    },\n" +
                "    {\n" +
                "        //按住alt + shift + F 可以格式化代码样式\n" +
                "        title: \"令狐冲的风流往事\",\n" +
                "        content: \"归妹趋无妄,无妄趋同人,同人趋大有。甲转丙,丙转庚,庚转癸。子丑之交,辰巳之交,午未之交。风雷是一变,山泽是一变,水火是一变。乾坤相激,震兑相激,离巽相激。三增而成五,五增而成九\",\n" +
                "        detail: \"1 引言\\n\\n在我跟学生课后交流时,以及我在知乎上阅读有关“经济”问题的论题时,经常会遇到这样的情况:有些人套用“经济理论“的知识去解释现实中发生的经济事件,结果发现很多事情讲不通,或者发现”理论告诉我们的“与现实发生的是相反的。也有学生经常跟我说:经济学有什么用?为了说明这个,我经常从两个方面来进行解释,尝试用我个人所擅长的解决问题的视角和他们能够听懂的方法来说明经济学是什么,它的作用边界在哪里:\\r\\n\\n2 ”简笔素描“与”油画肖像“我们给人画肖像画,可以用简笔素描,也可以用油画肖像。油画肖像可以在最大程度上保存了人物的各方面的细节和特点,而简笔素描则忽略了很多细节。尽管简笔素描忽略了人物的许多细节,但我们仍旧能够很容易的认出画中的人物是谁。为什么?因为这种方法保留了人物最显著的特征,以至于我们可以忽略其次要特征而对人物做出判定。\\n\\n2.1 ”简笔素描“对于绝大多数的非经济学专业大众而言(经济学相关专业硕士学历以上),人们所接触到的经济学都是初级微观经济学。所谓的初级微观经济学,对于经济问题的”画法“就是一种”简笔素描“。比如初级微观经济学教材中广为使用的这种一元一次需求函数:y=bx+a,需求量的唯一变量是产品价格。但仅凭直觉我们就可以断言,现实中影响需求量的因素绝不止价格这一种,因此我们可以认为这个模型对经济问题的描述是失真的。然而但这种失真却是必要的和有意义的,其意义在与它利于揭示价格对于需求的影响,而不在于否定影响需求的其他因素——\",\n" +
                "        imgSrc: \"/images/post/sls.jpg\",\n" +
                "        headImgSrc: \"/images/post/sls.jpg\",\n" +
                "        reading: 62,\n" +
                "        collection: 92,\n" +
                "        author: \"知乎\",\n" +
                "        date: \"Nov 12 2016\",\n" +
                "        dateTime: \"三天前\",\n" +
                "        avatar: \"/images/avatar/3.png\",\n" +
                "        postId: 2,\n" +
                "        music: {\n" +
                "            url: \"http://ws.stream.qqmusic.qq.com/C100004HLusI2lLjZy.m4a?fromtag=38\",\n" +
                "            title: \"女儿情-万晓利\",\n" +
                "            coverImg: \"http://y.gtimg.cn/music/photo_new/T002R150x150M000004Wv5BO30pPc0.jpg?max_age=2592000\"\n" +
                "        }\n" +
                "    },\n" +
                "    {\n" +
                "        title: \"李寻欢和他身边的女人\",\n" +
                "        content: \"曾是朝廷殿试第三名「探花」,故人称「小李探花」,而后厌倦功名,弃官归隐;小李飞刀,例不虚发,百晓生所作《兵器谱》上排名第三。后遭仇家夹击,重伤不支,被龙啸云搭救,与之成为最好的朋友。\",\n" +
                "        imgSrc: \"/images/post/xiaolong.jpg\",\n" +
                "        reading: 102,\n" +
                "        detail: \"曾是朝廷殿试第三名「探花」,故人称「小李探花」,而后厌倦功名,弃官归隐;小李飞刀,例不虚发,百晓生所作《兵器谱》上排名第三。后遭仇家夹击,重伤不支,被龙啸云搭救,与之成为最好的朋友。\",\n" +
                "        collection: 92,\n" +
                "        dateTime: \"24小时前\",\n" +
                "        headImgSrc: \"/images/post/xiaolong.jpg\",\n" +
                "        author: \"猫是猫的猫\",\n" +
                "        date: \"Nov 20 2016\",\n" +
                "        avatar: \"/images/avatar/5.png\",\n" +
                "        postId: 3,\n" +
                "        music: {\n" +
                "            url: \"http://ws.stream.qqmusic.qq.com/C100002mWVx72p8Ugp.m4a?fromtag=38\",\n" +
                "            title: \"恋恋风尘-老狼\",\n" +
                "            coverImg: \"http://y.gtimg.cn/music/photo_new/T002R150x150M000001VaXQX1Z1Imq.jpg?max_age=2592000\",\n" +
                "        }\n" +
                "    },\n" +
                "    {\n" +
                "        title: \"三生三世十里桃花。\",\n" +
                "        content: \"那一世,大荒之中一处荒山,成就她与他的初见。\",\n" +
                "        imgSrc: \"/images/post/vr.png\",\n" +
                "        reading: 102,\n" +
                "        detail: \"远古众神凋零,现今只存了龙族、父神亲手创造的第一头凤凰折颜和九尾白狐一族。狐帝白止膝下得了四个儿子一个女儿。这唯一的一个女儿长得颇好,却是个炮灰命。活到十四万岁的高龄,笼统不过遇得五朵桃花。一朵碍于异族不能通婚,那思慕尚处于萌芽期,便被该桃花的爹娘终结了。一朵误以为她是个男儿身,纠结于这段断袖情,待出现个跟她长得相似的女子,立刻便跟着人跑了。一朵是他爹娘亲自做主给她定的亲,待到他们家走一趟,却看上了她的婢女,两人私奔了。一朵在心底里暗恋她暗恋了万儿八千年不敢表白,待鼓起勇气来表白时,她前未婚夫的爹娘为了补偿她,又与她重新结了一门亲。行交互。今年晚些时候,Oculus将开始出货类似的手部控制产品Oculus Touch。10月,索尼也将开始出货配备两个PlayStation Move手部控制器的PS VR。Leap Motion甚至更进一步:利用传感器来追踪手指和手部的运动。\",\n" +
                "        collection: 26,\n" +
                "        dateTime: \"24小时前\",\n" +
                "        headImgSrc: \"/images/post/vr.png\",\n" +
                "        author: \"夜华\",\n" +
                "        date: \"Nov 20 2016\",\n" +
                "        avatar: \"../../../images/avatar/3.png\",\n" +
                "        postId: 4,\n" +
                "        music: {\n" +
                "            url: \"http://ws.stream.qqmusic.qq.com/C100000Zn0vS4fKKo8.m4a?fromtag=38\",\n" +
                "            title: \"沉默是金-张国荣\",\n" +
                "            coverImg: \"http://y.gtimg.cn/music/photo_new/T002R150x150M000003at0mJ2YrR2H.jpg?max_age=2592000\"\n" +
                "        }\n" +
                "    },\n" +
                "    {\n" +
                "        title: \"谁让吕布半夜娇喘\",\n" +
                "        content: \"三英战吕布是用的什么姿势\",\n" +
                "        imgSrc: \"/images/iqiyi.png\",\n" +
                "        reading: 96,\n" +
                "        detail: \"三英战吕布壁画“三英战吕布”是长篇历史小说《三国演义》中的一个故事情节,出自第五回“发矫诏诸镇应曹公 破关兵三英战吕布”。故事背景为曹操联合十八路诸侯讨伐董卓,上将吕布一连打败众将之后,刘备、关羽、张飞三兄弟在虎牢关与吕布大战的故事。见于《三国演义》第五回发矫诏诸镇应曹公 破关兵三英战吕布。“三英”指刘备(字玄德)、关羽(字云长)、张飞(字翼德)。\",\n" +
                "        collection: 26,\n" +
                "        dateTime: \"21小时前\",\n" +
                "        headImgSrc: \"/images/iqiyi.png\",\n" +
                "        author: \"深白色\",\n" +
                "        date: \"Nov 20 2016\",\n" +
                "        avatar: \"../../../images/avatar/5.png\",\n" +
                "        postId: 5,\n" +
                "        music: {\n" +
                "            url: \"http://ws.stream.qqmusic.qq.com/C100002I8eGJ28BI17.m4a?fromtag=38\",\n" +
                "            title: \"朋友-谭咏麟\",\n" +
                "            coverImg: \"http://y.gtimg.cn/music/photo_new/T002R150x150M000004eGsCN3SUheO.jpg?max_age=2592000\"\n" +
                "        }\n" +
                "    },\n" +
                "]";
  List ebooks=JSON.parseArray(str, Ebook.class);
        for (int i=0;i{
            System.out.print(ebooks.get(i).getDate()+"\t"+ebooks.get(i).getTitle()+
                    "\t"+ebooks.get(i).getAvatar()+"\t"+ebooks.get(i).getImgSrc()+"\t");
            for (Music musics:ebooks.get(i).getMusic()) {
                System.out.println(musics.getTitle()+"\t"+musics.getCoverImg()+"\t"+musics.getUrl());
                System.out.println();
            }
        }

**//用Gson进行集合解析    TypeToken转换器**
public static void main(String[] args) {
        String studentJson="[{\"uid\":1,\"uname\":\"小彬彬\",\"uproject\":\"Mathmatics\"}," +
                "{\"uid\":2,\"uname\":\"小小彬\",\"uproject\":\"Mathmatics\"}," +
                "{\"uid\":3,\"uname\":\"小可爱\",\"uproject\":\"Mathmatics\"}]";
       //用Gson进行集合解析    TypeToken转换器
        Gson gson=new Gson();
       List list=  gson.fromJson(studentJson,new TypeToken>(){}.getType());
        for (Student student1:list) {
            System.out.println(student1.getUid()+"\t"+student1.getUname()+"\t"+student1.getUproject());
        }

    **//把集合转换成Json串**
        String str=gson.toJson(list);
        System.out.println(str);
    }

ajax 异步处理, 局部刷新 用于web中
index.jsp

//get方法发送时
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <style>
          span{
              color: red;
          }
      style>
    <script src="js/jquery2.0.min.js">script>
    <script type="text/javascript">
      function show() {
         /* 获取input的值*/
          var userName=$("#userName").val();
          if (userName==null || userName==""){
              $("span").html("您输入的不能为空")
          } else{
            /*  ajax请求*/
              xmlHttpRequest=new XMLHttpRequest();
              /*设置url地址*/
              var url="userServlet?name="+userName;

              /* 设置回调 (一定要在发送send前写回调) */
              xmlHttpRequest.onreadystatechange=callBack;
              //创建与服务器的连接(第一个参数 设置请求方式,第二个参数发送的url 第三个参数,是否支持异步)
              xmlHttpRequest.open("get",url,true);
              xmlHttpRequest.send(null);//发送

             function callBack(){

                 if(xmlHttpRequest.status==200){
                     //获取里面的值
                    var flag=xmlHttpRequest.responseText;
                    if(flag=="true"){
                        $("span").html("验证成功");
                    }else{
                        $("span").html("验证失败");
                    }
                 }

             }

          }

      }


    script>
    <title>$Title$title>
  head>
  <body>
 <input type="test" name="userName" id="userName" onblur="show()"><span>span>
  body>
html>
//post方法发送时
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
      <style>
          span{
              color: red;
          }
      style>
    <script src="js/jquery2.0.min.js">script>
    <script type="text/javascript">
      function show() {
         /* 获取input的值*/
          var userName=$("#userName").val();


          if (userName==null || userName==""){
              $("span").html("您输入的不能为空")
          } else{
            /*  ajax请求*/
              xmlHttpRequest=new XMLHttpRequest();
              /*设置url地址*/
              var url="userServlet";

              /* 设置回调 (一定要在发送send前写回调) */
              xmlHttpRequest.onreadystatechange=callBack;
              //创建与服务器的连接(第一个参数 设置请求方式,第二个参数发送的url 第三个参数,是否支持异步)
              xmlHttpRequest.open("POST", url, true);
              xmlHttpRequest.setRequestHeader("Content-Type",
                  "application/x-www-form-urlencoded");//post提交方式必须加此行代码
              var data = "name=" + userName;//需要发送的数据信息,name为用户名文本框获取的值
              xmlHttpRequest.send(data);


              function callBack(){

                 if(xmlHttpRequest.status==200){
                     //获取里面的值
                    var flag=xmlHttpRequest.responseText;
                    if(flag=="true"){
                        $("span").html("验证成功");
                    }else{
                        $("span").html("验证失败");
                    }
                 }

             }

          }

      }

    script>
    <title>$Title$title>
  head>
  <body>
 <input type="test" name="userName" id="userName" onblur="show()"><span>span>
  body>
html>

UserServlet.java

public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        String userName= req.getParameter("name");

        boolean flag=false;
        if (userName.equals("ajax")){
            flag=true;
        }else{
            flag=false;
        }
        PrintWriter out= resp.getWriter();
        out.print(flag);
        out.flush();
        out.close();
    }
}

你可能感兴趣的:(对json串的解析 fastjson gson ajax异步刷新)