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 相关文章推荐
jQuery ui1.7 dialog只能弹出一次问题
Aug 27 Javascript
js与jQuery 获取父窗、子窗的iframe
Dec 20 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
Apr 07 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
Jun 17 Javascript
浅谈JS的基础类型与引用类型
Sep 13 Javascript
jquery动态创建div与input的实例代码
Oct 12 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
Dec 07 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
Dec 11 Javascript
vue中实现上传文件给后台实例详解
Aug 22 Javascript
vue各种事件监听实例(小结)
Jun 24 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
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
28个JS验证函数收集
2010/03/02 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
利用Python开发微信支付的注意事项
2016/08/19 Python
详解python中@的用法
2019/03/27 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
资源环境与城市管理专业推荐信
2013/11/30 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
军训教官感言
2014/03/02 职场文书
语文教育专业求职信
2014/06/28 职场文书
学习型党组织心得体会
2014/09/12 职场文书
企业法人代表证明书
2014/09/27 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
PHP使用QR Code生成二维码实例
2021/07/07 PHP
Python学习之异常中的finally使用详解
2022/03/16 Python
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫