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以及 ...
随机推荐
- [转载] Rss 与 Feed 的概念区别
转载自http://www.chinaz.com/news/2011/0831/207961.shtml 可能很多刚刚接触博客的童鞋们,也和我一样不太了解:rss和feed概念或者说不了解rss和fe ...
- 单例模式/ThreadLocal/线程内共享数据
import java.util.Random; public class ThreadDemo3 { public static void main(String[] args) { for(int ...
- C++语言中的类型(一)
--分门别类是简化事物最有效的方式. 类型是C++语言的基础,对象类型决定了能对该对象进行的操作. 一.基本内置数据类型 C++预先定义的基本内置数据类型是构造世界万物的原子,数据类型告诉我们数据的意 ...
- makefile中伪目标的理解
1. 我们知道Makefile中的语法是这样: target ... : prerequisites ... command - - 2. 假如编译两个文件可以这么写: a.o:a.c gcc -c ...
- Less的转义字符
Less的转义字符 有时候,当需要引入无效的CSS语法或Less不能识别的字符,就需要使用转义字符.此时,就可以在字符串前面加一个 ~,并将需要转义的字符串放在 "" 中.格式为: ...
- 2810:完美立方-poj
2810:完美立方 总时间限制: 1000ms 内存限制: 65536kB 描述 形如a3= b3 + c3 + d3的等式被称为完美立方等式.例如123= 63 + 83 + 103 .编写一个 ...
- ShoneSharp语言(S#)的设计和使用介绍系列(3)— 修炼工具
ShoneSharp语言(S#)的设计和使用介绍 系列(3)- 修炼工具 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. ...
- RAC环境下误操作将数据文件添加到本地存储
今天碰到个有意思的事情,有客户在Oracle RAC环境,误操作将新增的数据文件直接创建到了其中一个节点的本地存储上. 发现网上去搜的话这种问题还真不少,对应解决方案也各式各样,客户问我选择哪种方案可 ...
- Win10 之最新最简单有效安装配置adb
今天在新买的笔记本上安装配置adb,开始觉得挺简单的事,公司win7电脑上有现成的,但实际过程中--没想的那么简单了!好了,废话少说,直接正题. 研究了好一会下,总算搞定,总结如下: 1.下载Andr ...
- hdu 2586 How far away ?倍增LCA
hdu 2586 How far away ?倍增LCA 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路: 针对询问次数多的时候,采取倍增 ...