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 相关文章推荐
js 函数调用模式小结
Dec 26 Javascript
再谈javascript原型继承
Nov 10 Javascript
浅析javascript函数表达式
Feb 10 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
Mar 12 Javascript
BootStrap的JS插件之轮播效果案例详解
May 16 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
Nov 01 Javascript
jQuery弹出div层过2秒自动消失
Nov 29 Javascript
vue2 前端搜索实现示例
Feb 26 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
Mar 01 Javascript
浅谈Angular单元测试总结
Mar 22 Javascript
js实现倒计时秒杀效果
Mar 25 Javascript
详细介绍Next.js脚手架完整搭建封装
Apr 26 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
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
php实现把数组按指定的个数分隔
2014/02/17 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
取得父标签
2006/11/14 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
2016/02/28 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
vue中的scope使用详解
2017/10/29 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
javascript中闭包closure的深入讲解
2021/03/03 Javascript
深入解析Python编程中JSON模块的使用
2015/10/15 Python
python微信好友数据分析详解
2018/11/19 Python
python实现抖音点赞功能
2019/04/07 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
keras中的卷积层&池化层的用法
2020/05/22 Python
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
活动志愿者自荐信
2014/01/27 职场文书
公司保密承诺书
2014/03/27 职场文书
酒店开业策划方案
2014/06/02 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android