json原理分析及实例介绍


Posted in Javascript onNovember 29, 2012

这次在项目中前后台的数据交互中用到了json,经过这段时间的使用,大概了解了一下,简单总结一下json。
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。
先看controller中的一段代码。看主要是看从数据库查询出来的数据是怎样以json的格式输出的。
[java]

@RequestMapping("/work/plan/checkSubmitForApproval") 
public void checkSubmitForApproval(String planId,HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException{ 
String result="{\"result\":\"faild\",\"personSituation\":\"null\"}"; 
HttpSession session = request.getSession(); 
String industryID = (String) session.getAttribute("industryID"); 
IIndustry industry = industryService.getById(industryID); 
if(industry.getType().equals("XXX")){ 
try { 
boolean flag = false; 
IProjectMain yearPlan = projectPlanService.findProjectPlanById(planId); 
List<IStaffInfo> listStaffInfo = sysStaffService.getStaffByPlanId(planId, industryID); 
for(int i=0;i<listStaffInfo.size();i++){ 
if(listStaffInfo.get(i).getPractitionersPost().equals(StaffRole.PROGECTMANAGER.toString())){ 
flag = true; 
} 
} 
if(flag == true){ 
result="{\"result\":\"success\",\"personSituation\":\""+yearPlan.getPerson_Situation()+"\"}"; 
}else{ 
result="{\"result\":\"success\",\"personSituation\":\""+yearPlan.getPerson_Situation()+"\",\"isManager\":\"false\"}"; 
} 
} catch (Exception e) { 
result="{\"result\":\"falid\"}"; 
throw new PlatformException(e); 
}finally{ 
OutputUtils.write(response,result,"text/x-json;charset=UTF-8"); 
}

先PutputUtils中的write代码
[java]
public static void write(HttpServletResponse response, String text, String contentType) 
{ 
PrintWriter out=null; 
response.setHeader("Pragma", "No-cache"); 
response.setHeader("Cache-Control", "no-cache"); 
response.setDateHeader("Expires", 0); 
response.setContentType(contentType); 
try 
{ 
out = response.getWriter(); 
out.write(text); 
} 
catch (IOException e) 
{ 
Logger.getLogger(OutputUtils.class).error(e.getMessage(), e); 
} finally{ 
if(out!=null){ 
out.flush(); 
out.close(); 
} 
} 
}

其中的思路是得到response的printwriter,将要输出的信息设置到其中。在界面层利用jquery的Post判断返回的信息。
[javascript]
<span style="white-space:pre"> </span>function distribute(){ 
var dplanId = $(".currli").attr("id"); 
if(dplanId != ""){ 
$.ajax({ 
type : "POST", 
url :做验证的action url, 
dataType : "json", 
success : function(data) { 
//HAVE为已分配状态 
if (data.result == "success" && data.personSituation == "UNHAVE") { 
with (document.getElementById("planForm")) { 
action=验证合法后要提交的url; 
method="post"; 
submit(); 
} 
<span style="white-space:pre"> </span>}

其中success:function(data)是一个回调函数,即上面做的验证action的方法成功之后执行的操作。在jquery的使用方法详情点击这里查看。
关于jquery的post提交不理解的同学,点击这里学习。
关于ajax和jquery的历史,建议参见维基百科中,写的很清楚。
jquery已经封装好了从response中取data的操作,所以这里用起来非常方便,省去了从xml中一点一点读取的头疼,给开发带来了极大方便。
Javascript 相关文章推荐
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
Sep 22 Javascript
jquery实现文本框数量加减功能的例子分享
May 10 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
Oct 16 Javascript
判断浏览器的内核及版本号方法汇总
Jan 05 Javascript
jQuery Ajax使用实例
Apr 16 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
Aug 05 Javascript
jquery实现表单验证简单实例演示
Nov 23 Javascript
Javascript中Date类型和Math类型详解
Feb 27 Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 Javascript
AngularJS常见过滤器用法实例总结
Jul 06 Javascript
BootStrap给table表格的每一行添加一个按钮事件
Sep 07 Javascript
JavaScript链式调用原理与实现方法详解
May 16 Javascript
javascript全局变量封装模块实现代码
Nov 28 #Javascript
Javascript Request获取请求参数如何实现
Nov 28 #Javascript
js移除事件 js绑定事件实例应用
Nov 28 #Javascript
js arguments对象应用介绍
Nov 28 #Javascript
web基于浏览器的本地存储方法应用
Nov 27 #Javascript
extjs 04_grid 单击事件新发现
Nov 27 #Javascript
javascript 正则表达式相关应介绍
Nov 27 #Javascript
You might like
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
浅说js变量
2011/05/25 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
js下载文件并修改文件名
2017/05/08 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
使用Kivy将python程序打包为apk文件
2017/07/29 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
Django之PopUp的具体实现方法
2019/08/31 Python
Python如何实现FTP功能
2020/05/28 Python
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
致跳高运动员广播稿
2014/01/13 职场文书
爱情检讨书大全
2014/01/21 职场文书
技术总监管理职责范本
2014/03/06 职场文书
群众路线领导对照材料
2014/08/23 职场文书
中学生逃课检讨书
2015/02/17 职场文书
MySQL连接控制插件介绍
2021/09/25 MySQL
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏
tomcat下部署jenkins的方法
2022/05/06 Servers
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技