JSON初步

1.什么是JSON

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

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

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

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

2.struts中使用JSON

引入jar包

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

result中的type属性设置为json

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

@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
        // }]
    }

5.JSON的特点

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

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

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

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

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

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

时间: 2024-10-25 21:40:36

JSON初步的相关文章

iOS彩票项目--第七天,初次读取json数据、KVC转模型技巧、运行时字典转模型以及初步对显示网页的操作并且跟踪标签

一.初次读取json数据 二.KVC转模型技巧,这里的技巧主要解决的是字典中的key 与 模型中有的属性对应不起来的时候 的解决办法 <方法1> <方法2>运行时字典转模型,运行时自己一直很晕.不过还是整理下来,方便以后用. 这里直接创建了一个分类. 头文件代码 1 // 2 // NSObject+Model.h 3 // Chaos_G 4 // 5 6 #import <Foundation/Foundation.h> 7 8 @interface NSObjec

Python下各种格式的编码效率初步测试(JSON,BSON, bz2, lzma,msgpack)

# -*- coding:utf-8 -*- ''' 测试证明BSON和JSON所需要的字节数相差无几,甚至更多. 压缩算法的效果取决于其冗余程度. ''' from __future__ import division import collections  # From Python standard library. import datetime test = {"name":"lemo", "age":12,         "

JSON+YAML初步学习+ciscoconfparse

Git git clone 在github.com右上角点击加号创建新的repository 在Linux或Mac命令行下,找到你想存放这个repository的目录,然后git clone 某个repository的https链接 git clone 除了上面那种方法还可以通过SSH的方式,但是我还没试过,那种是clone一个 .git为结尾的链接好像 cd 到.git 目录下,ll是看不出来的,只能ls -al,看到objects目录下有很多文件,其实每个文件都对应着一个“版本”,git的版

连接mongoDB根据ObjectID写入json数据(初步)

from pymongo import MongoClientfrom bson.objectid import ObjectIdimport json def read(data, find): # 设置以utf-8解码模式读取文件,encoding参数必须设置,否则默认以gbk模式读取文件,当文件中包含中文时,会报错 f = open(data, encoding='utf-8') setting = json.load(f) # 注意多重结构的读取语法 # family = setting

小记:对Android网络下载工具的初步封装!(包括json,字符串下载(volley),和图片下载(glide))

import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.widget.ImageView; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError

初步使用Volley-了解Volley基本用法

就在刚才恰恰初步看完了Volley源码,最主要的体会有两个: 1.必须了解Http协议,或者说必须熟悉如何构造Http请求和如何解析Http响应. 2.必须熟悉Cache的基本原理,并结合Http响应来分析如何进行Cache的最佳应用. 3.熟悉各种Queue和List,Map等的基本操作,了解线程同步和互斥锁. 4.最好用几张纸来记录主要的类的结构,以便分析关联性. 下面就是推荐如何看源码了.对于这个不熟悉的项目结构,我看到这样的目录结构: 因此我首先选择从外部查看,先看接口类,因为接口一般是

Diablo3英雄榜-使用Volley和Gson来处理暴雪API的Json数据

使用Volley和Gson来处理Json 暗黑3的API传递给我们的是一个Json数据.现在开始我们尝试来解析它.在百度了一下之后,我初步知道了2个工具.一个是Volley这个是用来获取Json数据.一个是Gson这个是用来解析Json数据. 本章的目标: 读取暴雪的API数据 解析该数据 使用Volley来获取Json数据 Volley支持原生字符串.图像.Json.可以让我们更专注于应用程序的逻辑.Volley通过下面的方法获取. $git clone https://android.goo

Jquery.ajax报parseerror Invalid JSON错误的原因和解决方法:不能解析

(默认: 自动判断 (xml 或 html)) 请求失败时调用时间.参数有以下三个:XMLHttpRequest 对象.错误信息.(可选)捕获的错误对象.如果发生了错误,错误信息(第二个参数)除了得到 null 之外,还可能是 "timeout" , "error" , "notmodified" 和 "parsererror" . error事件返回的第一个参数XMLHttpRequest有一些有用的信息: XMLHttpR

使用mysql innodb 使用5.7的json类型遇到的坑和解决办法

---------------------------------------------- #查询JSON的某个字段 select data -> '$.Host' from temp #创建虚拟列 ALTER TABLE temp ADD host varchar(128) GENERATED ALWAYS AS (json_extract(data,'$.Host')) VIRTUAL; #给虚拟列创建索引 ALTER TABLE temp ADD INDEX index_temp_hos