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);
});
JSON初步的更多相关文章
- JSON初步认识
一.背景 曾经有一段时间,XML是互联网传输结构化数据的标准.但是XML过于繁琐.冗长.JSON2001年就开始应用了,2006年,DC才把Json提交给IETF. 与XML相比,Json是在Java ...
- python 中的json解析库
当一个json 数据很大的时候.load起来是很耗时的.python中常见的json解析库有cjson,simplesjson,json, 初步比较了一下, 对于loads来讲 simplejson ...
- 怎么在.net里面解析JSON文件?
我在网上搜了好多的文章,讲了很多的方法.但是无一例外的都看不懂...可能是因为我在这方面是个白痴吧... 所幸的是,我搜到了一个博客,写的很是清晰,比我之前看的大片文章写的好多了,在这里:http:/ ...
- 超详细JSON解析步骤
JSON简介 JAVAScript Object Notation是一种轻量级的数据交换格式 具有良好的可读和便于快速编写的特性. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了 ...
- 动态加载与插件系统的初步实现(四):解析JSON、扩展Fiddler
按文章结构,这部分应该给出WCFRest项目示例,我想WinForm示例足够详尽了,况且WCFRest还不需要使用插件AppDomain那一套,于是把最近写的Fiddler扩展搬上来吧. Fiddle ...
- android 初步了解应用Gson 解析Json数据
1,因为没有服务器返回数据,对于Tomcat又懒得去配,所以我直接把数据写死到app中 先写一个实体类,便于操作 /** * 实体类 */ public class Person { int id ; ...
- JSON+YAML初步学习+ciscoconfparse
Git git clone 在github.com右上角点击加号创建新的repository 在Linux或Mac命令行下,找到你想存放这个repository的目录,然后git clone 某个re ...
- iOS彩票项目--第七天,初次读取json数据、KVC转模型技巧、运行时字典转模型以及初步对显示网页的操作并且跟踪标签
一.初次读取json数据 二.KVC转模型技巧,这里的技巧主要解决的是字典中的key 与 模型中有的属性对应不起来的时候 的解决办法 <方法1> <方法2>运行时字典转模型,运 ...
- python初步学习-python 模块之 json
json 模块 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写.一般API返回的数据大多是 JSON.XML,如果返回JSON的话,将获取 ...
随机推荐
- 转:Eric Lippert:阅读代码真的很难
转自:http://blog.jobbole.com/438/ 相关文章 微软资深软件工程师:阅读代码真的很难(第2篇) 阅读优秀代码是提高开发人员修为的一种捷径 学会阅读源代码 如何阅读大型代码库? ...
- OpenGL的glViewport视口变换函数详解[转]
调用glViewPort函数来决定视见区域,告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位.当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口. void glViewPort(G ...
- 百度地图-marker拖拉,右键菜单
marker拖拉,修改经纬度. //创建Map实例 var map = new BMap.Map("allmap"); var point=new BMap.Point(104.0 ...
- Sqlserver_时间用法
函数 描述 GETDATE() 返回当前的日期和时间 DATEPART() 返回日期/时间的单独部分 DATEADD() 在日期中添加或减去指定的时间间隔 DATEDIFF() 返回两个日期之间的时间 ...
- hiho_1054_滑动解锁
题目大意 智能手机九点屏幕滑动解锁,如果给出某些连接线段,求出经过所有给出线段的合法的滑动解锁手势的总数.题目链接: 滑动解锁 题目分析 首先,尝试求解没有给定线段情况下,所有合法的路径的总数.可以使 ...
- [saiku] JCR在saiku中的运用原理
转载自: 什么是JAVA内容仓库(Java Content Repository)(1) 什么是JAVA内容仓库(Java Content Repository)(2) 什么是JAVA内容仓库(Jav ...
- HTML5自学笔记[ 20 ]canvas绘图实例之绘制倒影
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- javaWeb学习之运用myeclipse结合tomcat开发一些简单的jsp和service
servlet是什么? servlet是java服务器端编程.不同于我们之前写的一般的java应用程序,Servlet程序是运行在服务器上的,服务器有很多种.....现在只是用过 tomcat ...
- Java 集合系列 01 总体框架
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- 20145236 《Java程序设计》课程总结
20145236 <Java程序设计>课程总结 一.每周读书笔记链接汇总 第一周读书笔记 第二周读书笔记 第三周读书笔记 第四周读书笔记 第五周读书笔记 第六周读书笔记 第七周读书笔记 第 ...