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+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
Oct 24 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
Nov 19 Javascript
Javascript实现倒计时(防页面刷新)实例
Dec 13 Javascript
使用BootStrap进行轮播图的制作
Jan 06 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
Feb 09 Javascript
基于JQuery及AJAX实现名人名言随机生成器
Feb 10 Javascript
React利用插件和不用插件实现双向绑定的方法详解
Jul 03 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
Jul 27 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
Angular2之二级路由详解
Aug 31 Javascript
js实现漂亮的星空背景
Nov 01 Javascript
微信小程序图片加载失败时替换为默认图片的方法
Dec 09 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在Web开发领域的优势
2006/10/09 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
php实现的CSS更新类实例
2014/09/22 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
您的网上新华书店:文轩网
2016/08/24 全球购物
大学生就业自荐信
2013/10/26 职场文书
法警的竞聘演讲稿
2014/01/02 职场文书
电子邮箱格式怎么写
2014/01/12 职场文书
幼儿教师国培感言
2014/02/19 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
科普 | 业余无线电知识-波段篇
2022/02/18 无线电