Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)


Posted in Javascript onOctober 25, 2016

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

一、JSON字符串转换为JSON对象: eval() 和 JSON.parse

eg- json字符串:

var data = '{ "name": "dran", "sex": "man" }';
var obj = eval("("+data+")"); 或者
var obj = JSON.parse(data);

然后,就可以这样读取: alert(obj.name + obj.sex);

提示:为什么要 eval这里要添加 ("("+data+")");呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句

二、JSON对象转换为JSON字符串 : obj.toJSONString()或者全局方法JSON.stringify(obj) (obj代表json对象)

eg-json对象: var obj = { "name": "dran", "sex": "man" };
var jstring = JSON.stringify(obj) ;// 建议用这个
var jstring = obj.toJSONString(); //toJSONString()不是js原生的方法,需要引入相应的库或自己定义后才能用 (不习惯用)

然后,就可以这样读取: alert(jstring);

注意:

目前,Firefox、Opera、IE8以上版本也提供了本地JSON支持。其中,JSON解释器提供的函数有:JSON.parse、JSON.stringify。

对于那些并不提供本地JSON支持的浏览器可以引入脚本json2.js,来实现JSON转换功能。json2.js脚本可到https://github.com/douglascrockford/JSON-js/blob/master/json2.js页面下载

在AJAX实现前后台数据交互的时候,通常使用JSON的数据格式,对于JSON来说,有严格的代码规范,一旦格式出问题,就无法显示出相应效果,同时还不在控制台报错

补充: ajax读取json数据拼接显示:

json文件:

{
"first":[
{"name":"张三","sex":"男","like":["吃饭","睡觉","打豆豆"]},
{"name":"李四","sex":"男"},
{"name":"王武","sex":"男"},
{"name":"李梅","sex":"女"},
],
"second":[
{"name":"上海大学","area":"上海"},
{"name":"武汉大学","area":"武汉"},
{"name":"北京大学","area":"北京"},
{"name":"山东大学","area":"山东"},
]
}

html和ajax代码

1、用for循环

$.ajax({
url : "ceshi.json",
type : "POST", 
dataType :"text", //浏览器把json文件当作文本文件 不然读取不出来 权宜之策就改成了text, 因为测试, json文件格式正确书写
success: function(data) { 
var dataJson = eval("("+data+")"); // 将json字符串数据解析成对象
var arr1 = dataJson.first;
var arr2 = dataJson.second;
//一栏显示 用for循环完成数组解析
for(var i = 0; i<arr1.length; i++){ 
for(var j = 0; j<arr2.length; j++){
var str='<div style="display:block">'+
'<div>姓名:'+arr1[i].name+' 性别:'+arr1[i].sex+'</div>'+
'<div>学校:'+arr2[j].name+'</div>'+
'<div>地点:'+arr2[j].area+'</div>'+
//'<div>喜好:'+arr1[i].like+'</div>'+ //全显示
//'<div>喜好:'+arr1[i].like[1]+'</div>'+ //单独设置
//'<div>喜好:'+arr1[i].like[0]+'</div>'+
'</div>';
}
$(".result").append(str);
}
//分层显示
//var str = "";
// var str1 = "";
// if (arr1 != null) {
// for (var i = 0; i < arr1.length; i++) { //这里面都是创建并赋值
// str += "<span>" + arr1[i].name + "</span><span>" + arr1[i].sex + "</span><br>";
// }
// $(".result").html(str);
// }
// if (arr2 != null) {
// for (var j = 0; j < arr2.length; j++) {
// str1 += "<span>" + arr2[j].name + "</span><span>" + arr2[j].area+ "</span><br>";
// }
// $(".result2").html(str1);
// }
},
error:function(data){
alert("error"); 
}
})
<div class="result">frist:</div>
<div class="result2">second:</div>
for

2、 each循环 使用$.each方法遍历返回的数据date,插入到class为 .result中

JSON:

[
{"name":"张三","sex":"男","like":["吃饭","睡觉","打豆豆"]},
{"name":"李四","sex":"男"},
{"name":"王武","sex":"男"},
{"name":"李梅","sex":"女"},
]
$.ajax({
url : "ceshi.json",
type : "POST", 
dataType :"text", //浏览器把json文件当作文本文件 不然读取不出来 权宜之策就改成了text, 因为测试, json文件格式正确书写
success: function(data) { 
var dataJson = eval("("+data+")"); // 将json字符串数据解析成对象
//each循环 使用$.each方法遍历返回的数据date,插入到class为 .result中 i 表示索引 item 信息值 对象 
$.each(dataJson,function(i,item){
var str='<div style="display:block">'+
'<div>姓名:'+item.name+' 性别:'+item.sex+'</div>'+
'<div>like:'+item.like+'</div>'+
'</div>'; 
$(".result").append(str); 
})
},
error:function(data){
alert("error"); 
}
})
<div class="result"></div>
each

PS:对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变

JSON 数据使用方法:

//json对象:
var jsonObj= {
"name":" 张三",
"sex":"男",
"age":26,
};
使用: jsonObj.name= "张三"
jsonObj.age= "26"
//json数组: []下标 从 0 开始
var jsonArr =[
{"name":"张三","sex":"男","like":["吃饭","睡觉","打豆豆"]},
{"name":"李四","sex":"男"},
{"name":"王武","sex":"男"},
]
使用: jsonArr[0].sex="男"
jsonArr[1].name="李四"
//多个数组: []下标 从 0 开始
var options = {
"city" :[
{ 
"name":"上海",
"area":"普陀区",
"option":"真北路",
"correct":"1"
},
{
"name":"石家庄",
"area":"河北",
"option":"在北方",
"correct":"2"
}],
"world":[
{
"title":"美国",
"content":"好莱坞大片 科幻"
},
{
"title":"中国",
"content":"爱我中华,虽远必诛"
}
]
};
options.city[0].area="普陀区"
options.world[1].content="爱我中华,虽远必诛

以上所述是小编给大家介绍的Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
超级退弹代码
Jul 07 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
Jun 08 Javascript
面向对象继承实例(a如何继承b问题)(自写)
Jul 01 Javascript
jquery实现点击消失的代码
Mar 03 Javascript
JavaScript实现页面跳转的方式汇总
May 16 Javascript
JavaScript中removeChild 方法开发示例代码
Aug 15 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 Javascript
利用node.js如何搭建一个简易的即时响应服务器
May 28 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
Jul 05 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
Mar 09 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 Javascript
利用yarn实现一个webpack+react种子
Oct 25 #Javascript
Yarn的安装与使用详细介绍
Oct 25 #Javascript
jQuery通过ajax快速批量提交表单数据
Oct 25 #Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 #Javascript
JavaScript模仿Pinterest实现图片预加载功能
Oct 25 #Javascript
微信小程序 video组件详解
Oct 25 #Javascript
微信小程序 form组件详解
Oct 25 #Javascript
You might like
牡丹941资料
2021/03/01 无线电
php短域名转换为实际域名函数
2011/01/17 PHP
php HandlerSocket的使用
2011/05/02 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
对python修改xml文件的节点值方法详解
2018/12/24 Python
python opencv实现图像边缘检测
2019/04/29 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
Python如何实现的二分查找算法
2020/05/27 Python
详解Python中的Lock和Rlock
2021/01/26 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
生日庆典策划方案
2014/06/02 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
nginx容器方式反向代理实战
2022/04/18 Servers