JavaScript处理解析JSON数据过程详解


Posted in Javascript onSeptember 11, 2015

JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。

JSON的规则很简单: 对象是一个无序的“‘名称/值'对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值' 对”之间使用“,”(逗号)分隔。具体细节参考http://www.json.org/json-zh.html

举个简单的例子:

js 代码

function showJSON() {  
  var user =  
  {  
  "username":"andy",  
  "age":20,  
  "info": { "tel": "123456", "cellphone": "98765"},  
  "address":  
  [  
  {"city":"beijing","postcode":"222333"},  
  {"city":"newyork","postcode":"555666"}  
  ]  
  }  
  alert(user.username);  
  alert(user.age);  
  alert(user.info.cellphone);  
  alert(user.address[0].city);  
  alert(user.address[0].postcode);  
  }

 这表示一个user对象,拥有username, age, info, address 等属性。

同样也可以用JSON来简单的修改数据,修改上面的例子

js 代码

function showJSON() {  
  var user =  
  {  
  "username":"andy",  
  "age":20,  
  "info": { "tel": "123456", "cellphone": "98765"},  
  "address":  
  [  
  {"city":"beijing","postcode":"222333"},  
  {"city":"newyork","postcode":"555666"}  
  ]  
  }  
  alert(user.username);  
  alert(user.age);  
  alert(user.info.cellphone);  
  alert(user.address[0].city);  
  alert(user.address[0].postcode);  
  user.username = "Tom";  
  alert(user.username);  
  }

JSON提供了json.js包,下载http://www.json.org/json.js 后,将其引入然后就可以简单的使用object.toJSONString()转换成JSON数据。

js 代码

function showCar() {  
  var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow");  
  alert(carr.toJSONString());  
  }  
  
  function Car(make, model, year, color)    {  
  this.make  =  make;  
  this.model  =  model;  
  this.year  =  year;  
  this.color  =  color;  
  }

可以使用eval来转换JSON字符到Object

js 代码

function myEval() {  
  var str = '{ "name": "Violet", "occupation": "character" }';  
  var obj = eval('(' + str + ')');  
  alert(obj.toJSONString());  
  }

或者使用parseJSON()方法

js 代码

function myEval() {  
  var str = '{ "name": "Violet", "occupation": "character" }';  
  var obj = str.parseJSON();  
  alert(obj.toJSONString());  
  }

下面使用prototype写一个JSON的ajax例子。

先写一个servlet (我的是servlet.ajax.JSONTest1.java)就写一句话

java 代码

response.getWriter().print("{ \"name\": \"Violet\", \"occupation\": \"character\" }");

再在页面中写一个ajax的请求

js 代码

function sendRequest() {  
  var url = "/MyWebApp/JSONTest1";  
  var mailAjax = new Ajax.Request(  
  url,  
  {  
  method: 'get',  
  onComplete: jsonResponse  
  }  
  );  
  }  
  
  function jsonResponse(originalRequest) {  
  alert(originalRequest.responseText);  
  var myobj = originalRequest.responseText.parseJSON();  
  alert(myobj.name);  
  }

prototype-1.5.1.js中提供了JSON的方法,String.evalJSON(), 可以不使用json.js, 修改上面的方法

js 代码

function jsonResponse(originalRequest) {  
  alert(originalRequest.responseText);  
  var myobj = originalRequest.responseText.evalJSON(true);  
  alert(myobj.name);  
  }

JSON还提供了java的jar包 http://www.json.org/java/index.html API也很简单,下面举个例子

在javascript中填加请求参数

js 代码

function sendRequest() {  
  var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow");  
  var pars = "car=" + carr.toJSONString();  
  
  var url = "/MyWebApp/JSONTest1";  
  var mailAjax = new Ajax.Request(  
  url,  
  {  
  method: 'get',  
  parameters: pars,  
  onComplete: jsonResponse  
  }  
  );  
  }

使用JSON请求字符串就可以简单的生成JSONObject并进行解析,修改servlet添加JSON的处理(要使用json.jar)

java 代码

private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {  
  String s3 = request.getParameter("car");  
  try {  
  JSONObject jsonObj = new JSONObject(s3);  
  System.out.println(jsonObj.getString("model"));  
  System.out.println(jsonObj.getInt("year"));  
  } catch (JSONException e) {  
  e.printStackTrace();  
  }  
  response.getWriter().print("{ \"name\": \"Violet\", \"occupation\": \"character\" }");  
  }

同样可以使用JSONObject生成JSON字符串,修改servlet

java 代码

private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {  
  String s3 = request.getParameter("car");  
  try {  
  JSONObject jsonObj = new JSONObject(s3);  
  System.out.println(jsonObj.getString("model"));  
  System.out.println(jsonObj.getInt("year"));  
  } catch (JSONException e) {  
  e.printStackTrace();  
  }  
  JSONObject resultJSON = new JSONObject();  
  try {  
  resultJSON.append("name", "Violet")  
  .append("occupation", "developer")  
  .append("age", new Integer(22));  
  System.out.println(resultJSON.toString());  
  } catch (JSONException e) {  
  e.printStackTrace();  
  }  
  response.getWriter().print(resultJSON.toString());  
  }  
  js 代码
  function jsonResponse(originalRequest) {  
  alert(originalRequest.responseText);  
  var myobj = originalRequest.responseText.evalJSON(true);  
  alert(myobj.name);  
  alert(myobj.age);  
  }

以上内容就是给大家介绍JavaScrip处理t解析JSON数据过程详解,希望对大家有所帮助。

Javascript 相关文章推荐
JQuery实现简单验证码提示解决方案
Dec 20 Javascript
jquery cookie实现的简单换肤功能适合小网站
Aug 25 Javascript
JS常用字符串处理方法应用总结
May 22 Javascript
javascript简易画板开发
Apr 12 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
Jan 16 Javascript
jQuery点击头像上传并预览图片
Feb 23 Javascript
JS利用cookies设置每隔24小时弹出框
Apr 20 Javascript
基于input框覆盖掉数字英文的实例讲解
Jul 21 Javascript
vue不通过路由直接获取url中参数的方法示例
Aug 24 Javascript
Vue.js进行查询操作的实例详解
Aug 25 Javascript
基于jQuery实现无缝轮播与左右点击效果
May 13 jQuery
vue使用nprogress加载路由进度条的方法
Jun 04 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
Sep 11 #Javascript
JavaScript实现算术平方根算法-代码超简单
Sep 11 #Javascript
js图片卷帘门导航菜单特效代码分享
Sep 10 #Javascript
jQuery超精致图片轮播幻灯片特效代码分享
Sep 10 #Javascript
手机端转盘抽奖代码分享
Sep 10 #Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
Sep 10 #Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
Sep 10 #Javascript
You might like
PHP经典的给图片加水印程序
2006/12/06 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
解析php如何将日志写进syslog
2013/06/28 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
怎么清空javascript数组
2013/05/11 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
[00:11]战神迅矛
2019/03/06 DOTA
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
python计算时间差的方法
2015/05/20 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
python web基础之加载静态文件实例
2018/03/20 Python
python实战教程之自动扫雷
2018/07/13 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
解决Django no such table: django_session的问题
2020/04/07 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
为什么需要版本控制
2016/10/28 面试题
结构工程研究生求职信
2013/10/13 职场文书
临床医学专业学生的自我评价分享
2013/11/21 职场文书
办护照工作证明范本
2014/01/14 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
工作态度不好检讨书
2015/05/06 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技