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的话,将获取 ...
随机推荐
- hdu 5339 Untitled
这题很明显是签到题,可我比赛时却没做出,赤裸裸的爆零了,真悲剧…… 看了题解后才知道直接暴搜就行,只是需要把它们从大到小排序后再搜,我当时就没想到...不想再多说了 一开始我直接枚举所有情况: #in ...
- C++ 11 右值引用
C++11中引入的一个非常重要的概念就是右值引用.理解右值引用是学习“移动语义”(move semantics)的基础.而要理解右值引用,就必须先区分左值与右值. 注意:左值右值翻译可能有些问题 *L ...
- 转载---jboss简单使用
初学Jboss,对于Jboss的基础认识以及配置做一些记录 Jboss基础: JBoss是什么–基于J2EE的应用服务器–开放源代码–JBoss核心服务不包括支持servlet/JSP的WEB容器,一 ...
- 配置Java EE Eclipse+Tomcat开发环境
以下将详细介绍在Eclipse下搭建Java EE开发环境的每一步, 环境:Win 7 + JDK 1.7 + Eclipse IDE for Java EE Developers 3.7 +Tomc ...
- php正则:匹配(),{},[]小括号,大括号,中括号里面的内容
php正则:匹配(),{},[]小括号,大括号,中括号里面的内容 比如有一段字符: $s='60c8 {"code":"200","message&q ...
- 打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion shared library"情况的解决办法
在网上有坑,各种解决方法都有,但似乎我这台64位机器不太给面子,都不能解决: 结果自己找到了解决办法,总结了一下,大多数软件出问题,如果卸载了重新装还是出现问题,一般都是注册表残留的问题: 将ecli ...
- Linux下修改系统时间并写入BIOS
我们一般使用“date -s”命令来修改系统时间.比如将系统时间设定成2005年7月26日的命令如下. #date -s 07/26/2005 将系统时间设定成下午11点12分0秒的命令如下. #da ...
- 关于java中JButton的样式设置(的一些我们应该知道的函数)(转)
1. 对JButton大小的设置 ——因为JButen是属于小器件类型的,所以一般的setSize不能对其惊醒大小的设置,所以一般我们用 button.setPreferredSize(new Dim ...
- 学编程,学单词.....在学习中积累自己的单词(不断更新__ing)
可以去肆意大话天下,可以去小民一般的言语,但是一定要清楚,知识的积累,至于心中,即便你说这粗俗的话,你的个性,气质依旧在那,比如北大的那啥教师(心中的典范),也只有这样,你才能低至市井,上至高阁... ...
- ajax接触
1. function doSave() { ajax_get("${contextPath}/auth/functionsave", $("#editForm" ...