服务器返回给异步对象的数据载体:

1.HTML

2.XML

3.JSON

一)什么是JSON

(1)JSON(Java Script Object Notation(记号,标记))是一种轻量级的数据交换语言,以文本字符串为基础,且易于让人阅读。

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

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

二)JSON的作用

(1)简化JS中创建自定义对象的方式

注意:JSON就是用JS语法来书写,所以必须放在<script>标签中

在用JS语法书写JSON时,最外面不要用""双引号

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>简化创建自定义对象的方式</title><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><!-- js方式定义Person对象<script type="text/javascript">function Person(id,name,sal){this.id = id;this.name = name;this.sal = sal;}var p = new Person(1,"波波",7000);document.write("编号:" + p.id + "<br/>");document.write("姓名:" + p.name + "<br/>");document.write("薪水:" + p.sal + "<br/>");</script>--><hr/><!-- json方式定义Person对象 --><script type="text/javascript">//采用js语言来书写var p = {id:1,name:"包包",sal:8000};//id可写为"id",name亦可以加引号//属性可以''或""符号//字符串必加''或""符号,其它类型不用加符号
        document.write("编号:" + p.id + "<br/>");document.write("姓名:" + p.name + "<br/>");document.write("薪水:" + p.sal + "<br/>");</script></body>
</html>

var p = { id:1,name:"哈哈",tel:[{no:"135",type:"中移动"},{no:"133",type:"中联通"}],show:function(username){alert("你的姓名是:" + p.name+":"+username);},isSingle:false            };var p = {'city':['北京','上海','广州','深圳']};
for(var i=0;i<p.city.length;i++){document.write(p.city[i]+"<br/>");
}

<html><head><title>创建一个数组,数组中有三个对象</title><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><script type="text/javascript">var ps = [{id:1,name:'哈哈'},{id:2,name:'呵呵'},{id:3,name:'嘻嘻'}];</script><script type="text/javascript">document.write("共有" + ps.length + "个学生<br/>");for(var i=0;i<ps.length;i++){document.write("编号:" + ps[i].id + "<br/>");document.write("姓名:" + ps[i].name + "<br/>");}</script></body>
</html>

<html><head><title>创建一个对象,使用function做为属性值</title><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><script type="text/javascript">var p = {id:1,name:'哈哈',isLove:true,home:['广州','深圳'],show : function(str){alert("你是" + str);}};//document.write(p.isLove?"已婚":"单身"+"<br/>");
        p.show("赵君");</script></body>
</html>

(2)在AJAX中,作为数据载体之一

注意:JS可以直接解析JSON格式的文本,前提是:该JSON必须采用JS格式书写的才行,如果该JSON是采用Java格式写的,必须使用eval()函数转换后,方可被JS解析,该eval("")函数接收一个字符串格式的内容。

(3)省份-城市-区域三级联动【Struts2 + JSON版】

切记:将来JSON是不能完完全全替代XML的,只能在定义对象和数据交换语言方面替代

JSP页面:

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>省份-城市-区域三级联动【Struts2 + JSON版】</title><script type="text/javascript" src="js/ajax.js"></script></head><body><select id="provinceID" style="width:111px"><option>选择省份</option><option>湖北</option><option>湖南</option><option>广东</option></select><select id="cityID" style="width:111px"><option>选择城市</option></select><select id="areaID" style="width:111px"><option>选择区域</option></select><!-- 省份->城市 --><script type="text/javascript">document.getElementById("provinceID").onchange = function(){//清空城市下拉框var cityElement = document.getElementById("cityID");cityElement.options.length = 1;//清空区域下拉框var areaElement = document.getElementById("areaID");areaElement.options.length = 1;var province = this[this.selectedIndex].innerHTML;if("选择省份" != province){//NO1)var ajax = createAJAX();//NO2)var method = "POST";var url = "${pageContext.request.contextPath}/findCityByProvinceRequest?time="+new Date().getTime();ajax.open(method,url);//NO3)
                ajax.setRequestHeader("content-type","application/x-www-form-urlencoded")//NO4)var content = "bean.province=" + province;ajax.send(content);//-------------------------------------------等待//NO5
                ajax.onreadystatechange = function(){if(ajax.readyState == 4){if(ajax.status == 200){//NO6)返回JAVA格式的JSON文本var jsonJAVA = ajax.responseText;//jsonJAVA所代表的是java格式的json文本,是不能直接被js执行的//解决方案:将java格式的json文本,转成js格式的json文本//如何做:用js提供的一个函数搞定var jsonJS = eval("("+jsonJAVA+")");  注意。在java中这里是固定写法,不能写为eval(jsonJAVA)var array = jsonJS.cityList;var size = array.length;for(var i=0;i<size;i++){var city = array[i];var option = document.createElement("option");option.innerHTML = city;cityElement.appendChild(option);}}}            }}}</script><!-- 城市->区域 --><script type="text/javascript">document.getElementById("cityID").onchange = function(){var areaElement = document.getElementById("areaID");areaElement.options.length = 1;var city = this[this.selectedIndex].innerHTML;if("选择城市" != city){//NO1)var ajax = createAJAX();//NO2)var method = "POST";var url = "${pageContext.request.contextPath}/findAreaByCityRequest?time="+new Date().getTime();ajax.open(method,url);//NO3)
                ajax.setRequestHeader("content-type","application/x-www-form-urlencoded")//NO4)var content = "bean.city=" + city;ajax.send(content);//------------------------------------------等待//NO5)
                ajax.onreadystatechange = function(){if(ajax.readyState == 4){if(ajax.status == 200){    //NO6)var jsonJAVA = ajax.responseText;var jsonJS = eval("("+jsonJAVA+")");var array = jsonJS.areaList;var size = array.length;for(var i=0;i<size;i++){var area = array[i];var option = document.createElement("option");option.innerHTML = area;areaElement.appendChild(option);}}}}}}</script></body>
</html>

/*** 封装省份和城市* @author AdminTC*/
public class Bean {private String province;//省份private String city;//城市public Bean(){}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}
}

ProvinceCityAreaAction.java

package cn.itcast.javaee.js.provincecityarea;import java.util.ArrayList;
import java.util.List;import com.opensymphony.xwork2.ActionSupport;/*** 省份-城市-区域三级联动【Struts2 + JSON版】* @author AdminTC*/
public class ProvinceCityAreaAction extends ActionSupport{private Bean bean;public Bean getBean() {return bean;}public void setBean(Bean bean) {this.bean = bean;}/*** 根据省份获取城市 */public String findCityByProvince() throws Exception {cityList = new ArrayList<String>();//注意:这里返回的json必须提供get,set方法,即必须为实例变量if("湖北".equals(bean.getProvince())){cityList.add("武汉");cityList.add("赤壁");}else if("湖南".equals(bean.getProvince())){cityList.add("郴州");cityList.add("张家界");cityList.add("浏阳");}else if("广东".equals(bean.getProvince())){cityList.add("阳江");cityList.add("清远");cityList.add("佛山");cityList.add("湛江");}//让struts2框架帮你将List/Set/Map<String>转成JSON文本 使用struts2-json-plugin-2.3.1.1.jar   在项目中引入该jar包即可return SUCCESS;}/*** 根据城市获取区域 */public String findAreaByCity() throws Exception {areaList = new ArrayList<String>();if("阳江".equals(bean.getCity())){areaList.add("AA");areaList.add("BB");}else if("清远".equals(bean.getCity())){areaList.add("CC");areaList.add("DD");;}else if("佛山".equals(bean.getCity())){areaList.add("EE");areaList.add("FF");}else if("湛江".equals(bean.getCity())){areaList.add("GG");areaList.add("HH");}return SUCCESS;}private List<String> areaList;//区域的集合       必须写此实例变量,并提供get方法,struts2转成json的时候会调用get方法,所以要返回的json值必须这么写。private List<String> cityList;//城市的集合public List<String> getCityList() {return cityList;}public List<String> getAreaList() {return areaList;}
}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="myPackage" extends="json-default" namespace="/">   json-default继承Struts-default<!-- 全局结果类型 --><global-results><result name="success" type="json"/></global-results>

        <action name="checkRequest" class="cn.itcast.javaee.js.checkcode.CheckcodeAction"  method="check"> </action><!-- 省份->城市 --><action name="findCityByProvinceRequest" class="cn.itcast.javaee.js.provincecityarea.ProvinceCityAreaAction" method="findCityByProvince"><result name="success" type="json">        </action><!-- 城市->区域 --><action name="findAreaByCityRequest" class="cn.itcast.javaee.js.provincecityarea.ProvinceCityAreaAction" method="findAreaByCity"></action></package>
</struts>

三)使用第三方工具,将JavaBean对象/ListSetMap对象转成JSON

上面在struts2中,使用了Struts2框架的功能,struts2-json-plugin-3.2.1.1.jar把list等对象转成json对象,但是如果在开发中使用的不是Struts2,而是其他技术呢,那如何把list等java对象转成JSON呢?

准备导入第三方jar包:

》commons-beanutils-1.7.0.jar

》commons-collections-3.1.jar

》commons-lang-2.5.jar

》commons-logging-1.1.1.jar

》ezmorph-1.0.3.jar

》json-lib-2.1-jdk15.jar

(1)JavaBean----->JSON

》JSONArray jsonArray = JSONArray.fromObject(city);

》String jsonJAVA = jsonArray.toString();

(2)List<JavaBean>----->JSON

》JSONArray jsonArray = JSONArray.fromObject(cityList);

》String jsonJAVA = jsonArray.toString();

(3)List<String>----->JSON

》JSONArray jsonArray = JSONArray.fromObject(stringList);

》String jsonJAVA = jsonArray.toString();

(4)Set<JavaBean>----->JSON

》JSONArray jsonArray = JSONArray.fromObject(citySet);

》String jsonJAVA = jsonArray.toString();

(5)Map<String,Object>----->JSON

》JSONArray jsonArray = JSONArray.fromObject(map);

》String jsonJAVA = jsonArray.toString();

最后一个例子切记,将来jQuery-EasyUI-DataGrid组件时我们还要用到

将来,在企业中,就算脱离struts2的环境,也能用第三方工具,将Java类型转成JSON文本

/*** 城市* @author AdminTC*/
public class City {private Integer id;private String name;public City(){}public City(Integer id, String name) {this.id = id;this.name = name;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

/*** 省份* @author AdminTC*/
public class Province {private Integer id;//编号private String name;//名字private List<City> cityList = new ArrayList<City>();public Province(){}public Province(Integer id, String name, List<City> cityList) {this.id = id;this.name = name;this.cityList = cityList;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<City> getCityList() {return cityList;}public void setCityList(List<City> cityList) {this.cityList = cityList;}
}

package cn.itcast.javaee.js.bean2json;import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;import net.sf.json.JSONArray;/*** 使用第三方工具,将JavaBean对象/List或Set或Map对象转成JSON * @author AdminTC*/
public class TestBean2Json {private static void javabean2json() {City city = new City(1,"广州");JSONArray jSONArray = JSONArray.fromObject(city);String jsonJAVA = jSONArray.toString();System.out.println(jsonJAVA);//[{"id":1,"name":"广州"}]
    }private static void list2json() {List<City> cityList = new ArrayList<City>();cityList.add(new City(1,"广州"));cityList.add(new City(2,"珠海"));JSONArray jSONArray = JSONArray.fromObject(cityList);String jsonJAVA = jSONArray.toString();System.out.println(jsonJAVA);//[{"id":1,"name":"广州"},{"id":2,"name":"珠海"}]
    }private static void set2json() {Set<City> citySet = new LinkedHashSet<City>();citySet.add(new City(1,"广州"));citySet.add(new City(2,"珠海"));JSONArray jSONArray = JSONArray.fromObject(citySet);String jsonJAVA = jSONArray.toString();System.out.println(jsonJAVA);//[{"id":1,"name":"广州"},{"id":2,"name":"珠海"}]
    }private static void javabeanlist2json() {List<City> cityList = new ArrayList<City>();cityList.add(new City(1,"中山"));cityList.add(new City(2,"佛山"));Province province = new Province(1,"广东",cityList);JSONArray jSONArray = JSONArray.fromObject(province);String jsonJAVA = jSONArray.toString();System.out.println(jsonJAVA);/*[{"id":1,"name":"广东""cityList":[{"id":1,"name":"中山"},{"id":2,"name":"佛山"}],}]*/}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);}public static void main(String[] args) {//javabean2json();//list2json();//set2json();//javabeanlist2json();
        map2json();}
}

四)总结JSON的特点

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

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

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

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

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

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

转载于:https://www.cnblogs.com/lxboy2009/p/6395713.html

JSON,java对象转json相关推荐

  1. java 对象转json json转对象

    java 对象转json json转对象 import com.alibaba.fastjson.JSON;/*** * @title: fastjson * @author: wll* @since ...

  2. Java对象转JSON时如何动态的增删改查属性

    1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...

  3. java 视图对象转换,使用spring boot开发时java对象和Json对象转换的问题_JavaScript_网络编程...

    将java对象转换为on对象,市面上有很多第三方jar包,如下: jackson(最常用) com.fasterxml.jackson.core jackson-databind 2.11.2 gso ...

  4. FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  5. Java对象转换为Json对象

    前言 曾几何时,XML是程序员的宠儿,是数据传输.API.AJAX应用等方面的不二选择,但自从JSON横空出世后,或者你会发觉你身边就有很多人开始抛弃XML,在他们的心目中,JSON已经完全取代了XM ...

  6. json java对象 简书_Java 对象的 Json 化与反 Json 化

    最近在家里修习 Java 这项技能,估计快点满技能点儿了,很开心.不过遇到了一个问题,困扰了我一阵子.问题是这样的,我要写 Android App,与服务器交互.大家都知道 Javascript 不知 ...

  7. java对象转json jackson_使用Jackson将Java对象转换为JSON

    我希望我的JSON看起来像这样: { "information": [{ "timestamp": "xxxx", "featur ...

  8. java对象和json对象之间互相转换

    2019独角兽企业重金招聘Python工程师标准>>> import java.util.ArrayList; import java.util.Collection; import ...

  9. Gson案例:Java对象与JSON字符串相互转换

    Gson案例:Java对象与JSON字符串相互转换 一.Gson概述 Gson是一个Java类库,可将Java对象转换为相应的JSON形式,也可以将JSON字符串转换为对应的Java对象.Gson是一 ...

  10. java对象转json格式

    2019独角兽企业重金招聘Python工程师标准>>> 使用json-lib将java对象转换成json字符串 学会了在j2ee中使用ajax后,有时候从服务器返回客户端的数据是对象 ...

最新文章

  1. visio 画图工具
  2. [云炬创业学笔记]第一章创业是什么测试4
  3. 2个多边形,其中一个包围另一个,如何将中间的环带区域涂成红色
  4. 使用第三方Markdown编辑器编辑为知笔记
  5. C++ string字符串常见操作函数
  6. 学习Spring Boot:(一)入门
  7. mongorepository查询条件_Java操作MongoDB采用MongoRepository仓库进行条件查询 | 学步园...
  8. css3 动画与display:none冲突的解决方案
  9. 关于hadoop2.4.1伪分布式系统的搭建
  10. 20191201每日一句
  11. 部署django应用
  12. 《软件过程管理》 第七章 软件过程的质量管理
  13. Fake it till you make it: face analysis in the wild using synthetic data alone
  14. 交换机的主要功能和工作特性
  15. 巧用Python爬取QQ空间好友信息,生成词云
  16. 苹果6s html5分数,iPhone 6s Plus的屏幕尺寸是多少?分辨率是多少?
  17. 2023届双非跨保计算机经验贴(最终上岸浙软)
  18. JS防抖(Debouncing)和节流(Throttling)
  19. Git新手入门视频教程
  20. 免费主机 虚拟主机 香港虚拟主机

热门文章

  1. 用python生成词云wordcloud
  2. redis 入门教程
  3. Lua笔记——4.Package
  4. spring.net nhibernate 分布布式事务(下)
  5. 【转载】ceph作为OpenStack的后端存储解决方案
  6. 月光博客 - 再谈软件保护中软加密和硬加密的安全强度
  7. 关于企业的信息化建设
  8. Windows Forms Programming In C# 读书笔记 - 第三章 Dialogs
  9. C#创建windows服务并定时执行
  10. 忘记mysq rootl密码