JS中Json数据的处理和解析JSON数据的方法详解


Posted in Javascript onJune 29, 2016

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

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); 
}

下面在重点给大家介绍JS中json数据的处理

1、 json数据结构(对象和数组)

json对象:var obj = {"name":"xiao","age":12};

json数组:var objArray = [{"name":"xiao","age":12},{"name":"xiao","age":12}];

2、 处理json数据,依赖文件有:jQuery.js

3、Note:数据传输过程中,json数据是以文本,即字符串格式形式存在;

JS语言操作的是JS对象;

所以json字符串与JS对象之间的转换是关键;

4、数据格式

Json字符串:var json_str = ‘{"name":"xiao","age":12}';

Josn对象:var obj = {"name":"xiao","age":12};

JS对象:Object {name: "xiao", age: 12}

5、类型转换

Json字符串——>JS对象,使用方法:

注明:

json_str、obj代表的是在本文子标题4中的数据类型;

obj = JSON.parse(json_str);
obj = jQuery.parseJSON(json_str);

Note:传入畸形json字符串(例如:‘{name:"xiao",age:12}'),会抛出异常;

Json字符串格式,严格格式:‘{"name":"xiao","age":12}'

JS对象——>Json字符串:

json_str = JSON. stringify(obj);

NOTE:

1、eval()是JS原生函数,使用该形式:eval(‘('+‘{name:"xiao",age:12}'+')'),并不安全,无法保证类型转换为JS对象;

2、上面3中方法,都经过chrome浏览器测试,下面是测试结果截图;

Json字符串——>JS对象;

JS中Json数据的处理和解析JSON数据的方法详解

JS对象——>Json字符串:

JS中Json数据的处理和解析JSON数据的方法详解

Javascript 相关文章推荐
JavaScript中for..in循环陷阱介绍
Nov 12 Javascript
Java File类的常用方法总结
Mar 18 Javascript
jQuery EasyUi实战教程之布局篇
Jan 26 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
Dec 31 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
Jul 24 Javascript
jQuery使用zTree插件实现可拖拽的树示例
Sep 23 jQuery
jQuery插件实现弹性运动完整示例
Jul 07 jQuery
微信小程序开发背景图显示功能
Aug 08 Javascript
Angular6 用户自定义标签开发的实现方法
Jan 08 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
Mar 27 Javascript
浅谈一种让小程序支持JSX语法的新思路
Jun 16 Javascript
JS实现多功能计算器
Oct 28 Javascript
简单实现js间歇或无缝滚动效果
Jun 29 #Javascript
js精准的倒计时函数分享
Jun 29 #Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
Jun 29 #Javascript
RequireJS多页面应用实例分析
Jun 29 #Javascript
全面了解JS中的匿名函数
Jun 29 #Javascript
大型JavaScript应用程序架构设计模式
Jun 29 #Javascript
基于JS模仿windows文件按名称排序效果
Jun 29 #Javascript
You might like
将一维或多维的数组连接成一个字符串的php代码
2010/08/08 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
不同浏览器的怪癖小结
2010/07/11 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
python实现查询IP地址所在地
2015/03/29 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
python设置环境变量的作用整理
2020/02/17 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
大专自我鉴定范文
2013/10/23 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
行政内勤岗位职责
2014/04/07 职场文书
寄语学生的话
2014/04/10 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
毕业生自荐信范文
2015/03/05 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
MongoDB数据库的安装步骤
2021/06/18 MongoDB
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL
python神经网络ResNet50模型
2022/05/06 Python
Redis入门基础常用操作命令整理
2022/06/01 Redis