json的那些事
1.什么是json?
json(javascript object notation)全称是javascript对象表示法,它是一种数据交换的文本格式,而不是一种编程语言,用于读取结构化数据。
2.如何打印json每个key的值?
//打印以下json的key值
var obj1 = { 'name': '小颖', 'age': 23, 'sex': '女' };
//实现方法
for (var i in obj1) {
console.log(obj1[i]);
}
3.json和字符串之间的转换
//字符串转json。
var str_obj1 = '{ "name": "小颖", "age": 23, "sex": "女" }';
var str_obj2 = '[{ "name": "仔仔", "age": 1, "sex": "男" },{ "name": "黑妞", "age": 1, "sex": "女" }]';
console.log('字符串转json')
console.log('************************');
//Javascript支持的转换方式
console.log('Javascript支持的转换方式');
function strToJson(str) {
var json = eval('(' + str + ')');
return json;
}
console.log(eval(2+3));
console.log(eval('2'+'3'));
console.log( typeof eval('2'+'3'));
console.log(eval('"2"+"3"'));
console.log( typeof eval('"2"+"3"'));
console.log(strToJson(str_obj1));
console.log(strToJson(str_obj2)); console.log(JSON.parse(str_obj1));
console.log(JSON.parse(str_obj2));
// 注意:某些低级的浏览器尚不支持JSON.parse()
//《高性能Javascript》一书即指出:警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。 //jQuery插件支持的转换方式
console.log('jQuery插件支持的转换方式');
console.log($.parseJSON(str_obj1));
console.log($.parseJSON(str_obj2));
console.log('************************');
//JSON.parse()和jQuery.parseJSON()的区别:有的浏览器不支持JSON.parse()方法,使用jQuery.parseJSON()方法时,在浏览器支持时会返回执行JSON.parse()方法的结果,否则会返回类似执行eval()方法的结果,以上结论参考jquery 1.9.1 得出。
//json转字符串
console.log('json转字符串')
console.log('------------------------');
var obj1 = { "name": "小颖", "age": 23, "sex": "女" }
var obj2 = [{ "name": "仔仔", "age": 1, "sex": "男" }, { "name": "黑妞", "age": 1, "sex": "女" }];
console.log('Javascript支持的转换方式')
console.log(typeof obj1);
console.log(JSON.stringify(obj1));
console.log(typeof JSON.stringify(obj1));
console.log(typeof obj2);
console.log(JSON.stringify(obj2));
console.log(typeof JSON.stringify(obj2));
console.log('------------------------');
打印结果:
4.有关json的面试题
1.打印json对象每个key值。
//打印以下json的key值
var obj1 = { 'name': '小颖', 'age': 23, 'sex': '女' };
//实现方法
for (var i in obj1) {
console.log(obj1[i]);
}
var obj2 = [{
name: '父亲1',
children: [{
name: '孩子1_1'
}, {
name: '孩子1_2',
children: [{
name: '孩子1_1_1'
}, {
name: '孩子1_1_2'
}]
}]
},{
name:'父亲2',
children: [{
name: '孩子2_1'
}, {
name: '孩子2_2',
children: [{
name: '孩子2_2_1'
}, {
name: '孩子2_2_2'
}]
}]
}];
function logKey(json){
json.map(function(item){
if(item.children){
console.log(item.name);
logKey(item.children);
}else{
console.log(item.name);
}
});
}
logKey(obj2);
2.JSON.parse()、$.parseJSON()、JSON.stringify()
//将下面的字符串转json。
var str_obj1 = '{ "name": "小颖", "age": 23, "sex": "女" }';
var str_obj2 = '[{ "name": "仔仔", "age": 1, "sex": "男" },{ "name": "黑妞", "age": 1, "sex": "女" }]';
console.log(JSON.parse(str_obj1));//{name: "小颖", age: 23, sex: "女"}
console.log(JSON.parse(str_obj2));//{name: "仔仔", age: 1, sex: "男"},{name: "黑妞", age: 1, sex: "女"}
console.log($.parseJSON(str_obj1));//{name: "小颖", age: 23, sex: "女"}
console.log($.parseJSON(str_obj2));//{name: "仔仔", age: 1, sex: "男"},{name: "黑妞", age: 1, sex: "女"}
//将下面的json转为字符串
var obj1 = { "name": "小颖", "age": 23, "sex": "女" }
var obj2 = [{ "name": "仔仔", "age": 1, "sex": "男" }, { "name": "黑妞", "age": 1, "sex": "女" }];
console.log(JSON.stringify(obj1));//{"name":"小颖","age":23,"sex":"女"}
console.log(JSON.stringify(obj2));//[{"name":"仔仔","age":1,"sex":"男"},
//{"name":"黑妞","age":1,"sex":"女"}]
3.用sort对json进行升序和降序排序。
升序:
var arry = [1, 6, 2, 7, 5, 9, 0];
var obj = [{ "name": "小颖", "age": 23, "sex": "女" }, { "name": "彤彤", "age": 13, "sex": "女" }, { "name": "老刘", "age": 26, "sex": "男" }, { "name": "坑坑", "age": 25, "sex": "男" }]; function ascending(v1, v2) {
if ((typeof v1) === 'object' && (typeof v2) === 'object') {
return v1.age - v2.age;
} else {
return v1 - v2;
}
}
//升序
console.log('*******升序*******');
console.log(arry.sort(ascending));
console.log('调用sort后arry:' + arry);
obj.sort(ascending);
console.log('调用sort后obj:');
console.log(JSON.stringify(obj));
打印结果:
降序
var arry = [1, 6, 2, 7, 5, 9, 0];
var obj = [{ "name": "小颖", "age": 23, "sex": "女" }, { "name": "彤彤", "age": 13, "sex": "女" }, { "name": "老刘", "age": 26, "sex": "男" }, { "name": "坑坑", "age": 25, "sex": "男" }]; function descending(v1, v2) {
if (typeof v1 === 'object' && typeof v2 === 'object') {
return -(v1.age - v2.age);
} else {
return -(v1 - v2);
}
}
//降序
console.log('-------降序-------')
console.log(arry.sort(descending));
console.log('调用sort后arry:' + arry);
obj.sort(descending);
console.log('调用sort后obj:');
console.log(JSON.stringify(obj));
打印结果:
json的那些事的更多相关文章
- 开发过程中关于JSON的那些事
在使用过程中,对JSON了解的还不够,特地整理一下,用于个人学习和知识参考. 1.IBM的json入门指南 json官网 2.javaweb中发送接收解析问题 3.Java解析json,以及js ...
- 关于JSON的那些事儿
JSON的那些事儿 曾经有一段时间,XML是互联网上传输结构化数据的事实标准,其突出特点是服务器与服务器间的通信.但是业内不少人认为XML过于繁琐.冗长,后面为了解决这个问题也出现了一些方案,但是由于 ...
- 遍历json数组实现树
今天小颖在工作中遇到要遍历树得问题了,实现后,怕后期遇到又忘记啦,所以记录下嘻嘻,其实这个和小颖之前写过得一篇文章 json的那些事 中第4点有关json的面试题有些类似. 数组格式: v ...
- 原生Ajax讲解
典型的http通信:浏览器向服务器发出请求,服务器向客户端返回响应,浏览器重新加载页面,这种不连续的页面加载方式导致用户的体验变得杂乱,缺乏连贯性. 如: 在一般的web应用程序中,用户填写表单字段然 ...
- 关于ajax的跨域
在前端开发中,跨域是经常遇到的问题,也是面试最喜欢问的问题,究其根本原因,是浏览器的同源策略所致,是浏览器为了避免不同域名不能共享cookie以及locationstorage等等,发起请求的时候无法 ...
- Appengine直接下载文件并保存到google drive
一直对下载文件比较感兴趣.前些日子无意搜到google 推出一项服务,可以直接将文件下载到google drive中,原型猛戳这里,但有限额限制.一时脑洞大开,可不可以在appengine 上架设服务 ...
- C# Ajax 技术
Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写.下面是 Ajax 应用程序所用到的基本技术:• HTML 用于建立 Web 表单并确定应用程 ...
- 爬虫学习笔记2requests库和beautifulsoup4库学习笔记
目录 1.requests库 1.1 安装 2.beautifulsoup4 2.1 常用方法 2.2 bs4 中四大对象种类 2.3 遍历文档树 2.4 搜索文档树 查询id=head的Tag 查询 ...
- [HTTP那些事] JSON数据
随着Android的发展,各路大神的贡献,我们可用的轮子越来越多.比如HTTP请求框架,有自家的Volley,Square的okhttp, async-http-lib, 还有聚合版的xUtils以及 ...
随机推荐
- 设计模式的征途—10.装饰(Decorator)模式
虽然目前房价依旧很高,就连我所在的成都郊区(非中心城区)的房价均价都早已破万,但却还是阻挡不了大家对新房的渴望和买房的热情.如果大家买的是清水房,那么无疑还有一项艰巨的任务在等着大家,那就是装修.对新 ...
- List实现
1.元素添加 #include <stdio.h> #include <stdlib.h> struct ListNode{ struct ListNode* next; in ...
- javascript第七章--DOM
① 节点层次 ② DOM操作技术
- Python 面向对象(一) 基础
Python 中一切皆对象 什么是面向对象? 面向对象就是将一些事物的共有特征抽象成类,从类来创建实例. 类class 可以理解为模版 比如人类,都具有身高.体重.年龄.性别.籍贯...等属性,但属性 ...
- 实验:ignite查询效率探究
前面的文章讲到ignite支持扫描查询和sql查询,其sql查询是ignite产品的一个亮点,那么哪一种的查询更适合我们的产品使用呢,往下看: 先分别贴一下扫描查询和sql查询两种查询方式的代码,供参 ...
- ExceptionLess 本地部署小结
ExceptionLess 是一个免费开源分布式系统日志收集框架,地址:https://github.com/exceptionless/Exceptionless 运行环境: .NET 4.6.1 ...
- mongodb数据库禁止外网访问以及添加账号
未曾料到被黑客勒索比特币的戏码竟然降临到我的身上,几个月的技术积累付之一炬.怪只怪自己学艺不精,心存侥幸和无知,不过经此一役,方知网络安全防护的重要性. 一直未给自己的mongodb数据库设置账号密码 ...
- 爱立信开始大规模mesh网络测试
mesh网络可谓是物联网之关键,相较于传统有线技术,无线连接的mesh网络实施成本较低,而且更具有适应性和可扩展性,让高通信量的应用更加可靠. 虽然Thread和ZigBee等细分技术也能提供标准化的 ...
- 关于xampp集成开发环境的建立与初步认识
针对于xampp集成开发环境的建立主要分大步骤: 1.把xampp的压缩包压缩到一个盘中,比如c盘:然后点击中间的那个图标开始安装,由于这个软件是配置基本已经OK了,故可以直接next ...
- 51Nod 1289 大鱼吃小鱼 栈模拟 思路
1289 大鱼吃小鱼 栈模拟 思路 题目链接 https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1289 思路: 用栈来模拟 ...