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);
});

JSON初步的更多相关文章

  1. JSON初步认识

    一.背景 曾经有一段时间,XML是互联网传输结构化数据的标准.但是XML过于繁琐.冗长.JSON2001年就开始应用了,2006年,DC才把Json提交给IETF. 与XML相比,Json是在Java ...

  2. python 中的json解析库

    当一个json 数据很大的时候.load起来是很耗时的.python中常见的json解析库有cjson,simplesjson,json, 初步比较了一下, 对于loads来讲 simplejson ...

  3. 怎么在.net里面解析JSON文件?

    我在网上搜了好多的文章,讲了很多的方法.但是无一例外的都看不懂...可能是因为我在这方面是个白痴吧... 所幸的是,我搜到了一个博客,写的很是清晰,比我之前看的大片文章写的好多了,在这里:http:/ ...

  4. 超详细JSON解析步骤

    JSON简介 JAVAScript Object Notation是一种轻量级的数据交换格式 具有良好的可读和便于快速编写的特性. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了 ...

  5. 动态加载与插件系统的初步实现(四):解析JSON、扩展Fiddler

    按文章结构,这部分应该给出WCFRest项目示例,我想WinForm示例足够详尽了,况且WCFRest还不需要使用插件AppDomain那一套,于是把最近写的Fiddler扩展搬上来吧. Fiddle ...

  6. android 初步了解应用Gson 解析Json数据

    1,因为没有服务器返回数据,对于Tomcat又懒得去配,所以我直接把数据写死到app中 先写一个实体类,便于操作 /** * 实体类 */ public class Person { int id ; ...

  7. JSON+YAML初步学习+ciscoconfparse

    Git git clone 在github.com右上角点击加号创建新的repository 在Linux或Mac命令行下,找到你想存放这个repository的目录,然后git clone 某个re ...

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

    一.初次读取json数据 二.KVC转模型技巧,这里的技巧主要解决的是字典中的key 与 模型中有的属性对应不起来的时候 的解决办法 <方法1> <方法2>运行时字典转模型,运 ...

  9. python初步学习-python 模块之 json

    json 模块 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写.一般API返回的数据大多是 JSON.XML,如果返回JSON的话,将获取 ...

随机推荐

  1. ios 开发之 Xcode6 No valid signing identities (i.e. certificate and private key pair) matching...

    之前的项目用证书真机测试过,我想再无证书Build,出现下面的报错提示! 下面的team我无法改成None!一点击None选的还是Unhonw name(JPGE28K3W9)这个是报错的关键 最后由 ...

  2. phalcon: 视图分层渲染,或包含其他页面

    一:视图分层显现: 比如:在一个页面中,头部.底部固定不变,只有中间部分随操作变换显示.那么可以将中间部分切出来,剩余部分用作固定框架,放入:app/views/layouts目录中,起名为:base ...

  3. 利用Github和Hexo搭建独立的个人博客--基础篇

    利用Github和Hexo搭建独立的个人博客--基础篇 摘要:本文主要参考了使用hexo和Github上创建自己的博客.如何搭建一个独立博客--简明Github Pages与Hexo教程和使用GitH ...

  4. 1.2G内存试玩RAMOS_XP

    1.2G内存试玩RAMOS_XP1.为了防止做系统时出现意外,用Bootice把C盘MBR修改为Grub4dos,这样子系统如果失败,可以进入PE重做. 2.进入PE格式化C盘,格式化的时候勾选启用N ...

  5. iOS 使用Keychain 保存 用户名和密码到 本地

    iOS 使用Keychain 保存 用户名和密码到 本地 之前曾把一些简单的数据保存在了plist,文件,及NsuserDefault里面, 但是如果要保存密码之类的,保存在本地就很不安全了: 但是利 ...

  6. 能源项目xml文件标签释义--DefaultAdvisorAutoProxyCreator

    [Spring]AOP拦截-三种方式实现自动代理 这里的自动代理,我讲的是自动代理bean对象,其实就是在xml中让我们不用配置代理工厂,也就是不用配置class为org.springframewor ...

  7. @ResponseStatus

    返回一个指定的http response状态码. @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "IOException oc ...

  8. 快速集成iOS基于RTMP的视频推流

    前言 这篇blog是iOS视频直播初窥:<喵播APP>的一个补充. 因为之前传到github上的项目中没有集成视频的推流.有很多朋友简信和微博上问我推流这部分怎么实现的. 所以, 我重新集 ...

  9. DOM中元素节点、属性节点、文本节点的理解

    DOM中元素节点.属性节点.文本节点的理解 节点信息 每个节点都拥有包含着关于节点某些信息的属性.这些属性是:nodeName(节点名称) nodeValue(节点值) nodeType(节点类型)  ...

  10. javaScript内置类Date,Math等

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head>     & ...