• JSON初步


    1.什么是JSON

    (1)JSON(Java Script Object Notation)是一种轻量级的数据交换语言,

            以文本字符串为基础,且易于让人阅读

            XML就是一个重量级的数据交换语言

    (2)JSON采用完全独立于任何程序语言的文本格式,使JSON成为理想的数据交换语言

    2.struts中使用JSON

    引入jar包

      struts2-json-plugin-2.3.20

    struts配置中将包继承自json-default

    result中的type属性设置为json

    struts如何找到要转为json的数据?

      将要转为json的数据设置为实例变量,并提供get方法,struts插件会扫描action中有get方法的实例变量,并转为json格式。如果指定输出哪些变量,在struts文件中配置返回root

                <result type="json">
                    <param name="root">return_map</param>
                </result>

    3.JSON实现的三级联动

    jsp:

        <select id="provinceID" onchange="getCity(this)">
            <option >选择省份</option>
            <option >广东</option>
            <option >山东</option>
        </select>
        <select id="cityID" onchange="getArea(this)">
            <option value="">选择城市</option>
        </select>
        <select id="areaID" >
            <option value="">选择区域</option>
        </select>

    js:

    function getCity(selEle)
    {
        var province = selEle[selEle.selectedIndex].innerHTML;
        //清空城市下拉框
        var cityEle = document.getElementById("cityID");
        cityEle.options.length=1;
        //清空区域下拉框
        var areaEle = document.getElementById("areaID");
        areaEle.options.length=1;
        if(province == "选择省份")
            return ;
        var ajax = createAJAX();
        var method = "POST";
        var url = "${pageContext.request.contextPath}/getCity?time="
            +new Date().getTime();
        ajax.open(method,url);
        var content = "loc.province="+province;
        ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
        ajax.send(content);
    
        ajax.onreadystatechange = function(){
            if(ajax.readyState == 4)
            {
                if(ajax.status == 200)
                {
    
                    //返回java格式的json,不能被js执行
                    var jsonJAVA = ajax.responseText;
                    //将java格式的json转成js格式的json
                    var jsonJS = eval("("+jsonJAVA+")");
                    var array = jsonJS.cityList;
                    for(var i =0;i<array.length;i++){
                        var option = document.createElement("option");
                        option.innerHTML = array[i];
                        cityEle.appendChild(option);
    
                    }
    
                }
            }
        }
    }
    
    function getArea(selEle) {
        var city = selEle[selEle.selectedIndex].innerHTML;
        //清空区域下拉框
        var areaEle = document.getElementById("areaID");
        areaEle.options.length=1;
        if(city == "选择城市") {
            return;
        }
        var ajax = createAJAX();
        var method = "POST";
        var url = "${pageContext.request.contextPath}/getArea?time="
            +new Date().getTime();
        ajax.open(method,url);
        ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
        var content = "loc.city="+city;
        ajax.send(content);
        ajax.onreadystatechange = function(){
            if(ajax.readyState == 4)
            {
                if(ajax.status == 200)
                {
                    var jsonJAVA = ajax.responseText;
    
                    var jsonJS = eval("("+jsonJAVA+")");
                    var array = jsonJS.areaList;
                    for(var i=0;i<array.length;i++){
                        var option = document.createElement("option");
                        option.innerHTML = array[i];
                        areaEle.appendChild(option);
                    }
                }
            }
        }
    
    }

    struts.xml

        <package name="json" extends="json-default">
            <action name="getCity" class="jsonAction" method="getCity">
                <result name="success" type="json"/>
            </action>
            <action name="getArea" class="jsonAction" method="getArea">
                <result name="success" type="json"/>
            </action>
        </package>

    action:

    public class JsonAction extends ActionSupport implements RequestAware{
        private Map<String,Object> request;
        @Override
        public void setRequest(Map<String, Object> map) {
            this.request = map;
        }
    
        private Location loc;
    
        public void setLoc(Location loc) {
            this.loc = loc;
        }
    
        public Location getLoc() {
            return loc;
        }
        private List<String> cityList;
    
        public List<String> getCityList() {
            return cityList;
        }
    
        //    根据省份获得城市
        public String getCity(){
            cityList = new ArrayList<String>();
            if("广东".equals(loc.getProvince()))
            {
                cityList.add("广州");
                cityList.add("深圳");
                cityList.add("珠海");
            }
            else if("山东".equals(loc.getProvince()))
            {
                cityList.add("济南");
                cityList.add("枣庄");
                cityList.add("青岛");
                cityList.add("烟台");
            }
            return SUCCESS;
        }
    //    根据城市获取区域
        private List<String> areaList;
    
        public List<String> getAreaList() {
            return areaList;
        }
    
        public String getArea(){
            areaList = new ArrayList<String>();
            if("枣庄".equals(loc.getCity()))
            {
                areaList.add("市中区");
                areaList.add("山亭区");
                areaList.add("台儿庄区");
            }
            return SUCCESS;
        }
    }

    4.使用第三方工具,将Bean对象、List、Set、Map对象转成JSON

    引入jar包 json-lib-2.3-jdk15

    @Test
        public void test1(){
            Location location = new Location();
            location.setProvince("山东");
            location.setCity("枣庄");
            JSONArray jsonArray = JSONArray.fromObject(location);
            System.out.println(jsonArray);
            //[{"province":"山东","city":"枣庄"}]
        }
        @Test
        public void test2(){
            ArrayList<Location> locs = new ArrayList<>();
            Location location = new Location();
            location.setProvince("山东");
            location.setCity("枣庄");
            Location location2 = new Location();
            location2.setProvince("广东");
            location2.setCity("广州");
            locs.add(location);
            locs.add(location2);
            JSONArray jsonArray = JSONArray.fromObject(locs);
            System.out.println(jsonArray);
            //[{"province":"山东","city":"枣庄"},{"province":"广东","city":"广州"}]
        }
        @Test
        public void test3(){
            Set<Location> locs = new LinkedHashSet<>();
            Location location = new Location();
            location.setProvince("山东");
            location.setCity("枣庄");
            Location location2 = new Location();
            location2.setProvince("广东");
            location2.setCity("广州");
            locs.add(location);
            locs.add(location2);
            JSONArray jsonArray = JSONArray.fromObject(locs);
            System.out.println(jsonArray);
            //[{"province":"山东","city":"枣庄"},{"province":"广东","city":"广州"}]
        }
        @Test
        public void test4(){
            Department department = new Department();
            department.setId(10);
            Employee emp1 = new Employee();
            emp1.setEmpName("zhang");
            emp1.setSalary(1000);
            Employee emp2= new Employee();
            emp2.setEmpName("lisi");
            emp2.setSalary(2000);
            List<Employee> employeeList = new ArrayList<Employee>();
            employeeList.add(emp1);
            employeeList.add(emp2);
            department.setEmps(employeeList);
            JSONArray jsonArray = JSONArray.fromObject(department);
            System.out.println(jsonArray);
            //[{
            // "emps":[{"empId":0,"empName":"zhang","dept":null,"salary":1000},
            // {"empId":0,"empName":"lisi","dept":null,"salary":2000}],
            // "id":10
            // }]
        }

    map转为json

        private static void map2json() {
            
            List<City> cityList = new ArrayList<City>();
            cityList.add(new City(1,"中山"));
            cityList.add(new City(2,"佛山"));
            
            Map<String,Object> map = new LinkedHashMap<String,Object>();
            map.put("total",cityList.size());//表示集合的长度
            map.put("rows",cityList);//rows表示集合
            
            JSONArray jSONArray = JSONArray.fromObject(map);
            String jsonJAVA = jSONArray.toString();
            System.out.println(jsonJAVA);
            //[{"total":2,"rows":[{"id":1,"name":"中山"},{"id":2,"name":"佛山"}]}]
            
            jsonJAVA = jsonJAVA.substring(1,jsonJAVA.length()-1);
            System.out.println(jsonJAVA);
        }

    5.JSON的特点

       (1)在客户端,直接使用JavaScript语言解析JSON,无需第三方jar包

       (2)本质上,就是一个文本,只是该文本有特定的书写格式

       (3)可以使用第三方工具,将JavaBean对象或者List/Set/Map<JavaBean>对象转成JSON

       (4)优点:JSON与XML很相似,但是它更加轻巧,服务器只需发送一个html普通字符串,不用发送复杂的xml格式文档了

       (5)缺点:语法过于严谨,初学者可能觉得代码不易读,写错一点都不行

       (6)JSON本质上,就是用JS语法写的特殊文本记号,用JS可以直接解析

    6.JSON数组及遍历

            /*用JSON语法创建一个一维数组,存入string类型的姓名,再迭代*/
            var nameArray = ["哈哈","呵呵","嘻嘻","都都"];//js对象
            var $nameArray = $(nameArray);//jquery对象
            $nameArray.each(function(){
                    //this表示数组中每一个元素,this属性js对象,this代表string类型
                alert(this);
            });    
            
            //用JSON语法创建一个一维数组,存入object类型的姓名和薪水,再迭代
            var nameArray = [
                {
                    name : "哈哈",
                    sal : 6000
                },
                {    
                    name : "嘿嘿",
                    sal : 7000
                },
                {
                    name : "笨笨",
                    sal : 8000
                }
            ];
            var $nameArray = $(nameArray);
            $nameArray.each(function(){
                //this代表object类型
                alert(this.name + ":"+this.sal);
            });        
  • 相关阅读:
    C++/C函数的调用规范
    Computer Science Conference Rankings 计算机科学会议排名 Rank
    Height of CComboBox's drop down list
    java instrument跟踪java freemarker调用过程
    Text to speech hello world sapi
    Visual Studio 插件 代码注释对齐
    #define WINVER 0x0501 之后菜单不显示图标了
    转 用NodeJS打造你的静态文件服务器
    代码注释对齐
    修复MSN上联系人全部显示脱机状态,删除缓存
  • 原文地址:https://www.cnblogs.com/juaner767/p/5616580.html
Copyright © 2020-2023  润新知