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的那些事的更多相关文章

  1. 开发过程中关于JSON的那些事

    在使用过程中,对JSON了解的还不够,特地整理一下,用于个人学习和知识参考. 1.IBM的json入门指南    json官网 2.javaweb中发送接收解析问题 3.Java解析json,以及js ...

  2. 关于JSON的那些事儿

    JSON的那些事儿 曾经有一段时间,XML是互联网上传输结构化数据的事实标准,其突出特点是服务器与服务器间的通信.但是业内不少人认为XML过于繁琐.冗长,后面为了解决这个问题也出现了一些方案,但是由于 ...

  3. 遍历json数组实现树

    今天小颖在工作中遇到要遍历树得问题了,实现后,怕后期遇到又忘记啦,所以记录下嘻嘻,其实这个和小颖之前写过得一篇文章    json的那些事    中第4点有关json的面试题有些类似. 数组格式: v ...

  4. 原生Ajax讲解

    典型的http通信:浏览器向服务器发出请求,服务器向客户端返回响应,浏览器重新加载页面,这种不连续的页面加载方式导致用户的体验变得杂乱,缺乏连贯性. 如: 在一般的web应用程序中,用户填写表单字段然 ...

  5. 关于ajax的跨域

    在前端开发中,跨域是经常遇到的问题,也是面试最喜欢问的问题,究其根本原因,是浏览器的同源策略所致,是浏览器为了避免不同域名不能共享cookie以及locationstorage等等,发起请求的时候无法 ...

  6. Appengine直接下载文件并保存到google drive

    一直对下载文件比较感兴趣.前些日子无意搜到google 推出一项服务,可以直接将文件下载到google drive中,原型猛戳这里,但有限额限制.一时脑洞大开,可不可以在appengine 上架设服务 ...

  7. C# Ajax 技术

    Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写.下面是 Ajax 应用程序所用到的基本技术:• HTML 用于建立 Web 表单并确定应用程 ...

  8. 爬虫学习笔记2requests库和beautifulsoup4库学习笔记

    目录 1.requests库 1.1 安装 2.beautifulsoup4 2.1 常用方法 2.2 bs4 中四大对象种类 2.3 遍历文档树 2.4 搜索文档树 查询id=head的Tag 查询 ...

  9. [HTTP那些事] JSON数据

    随着Android的发展,各路大神的贡献,我们可用的轮子越来越多.比如HTTP请求框架,有自家的Volley,Square的okhttp, async-http-lib, 还有聚合版的xUtils以及 ...

随机推荐

  1. git如何忽略文件

    偶尔有一些文件你不想让git提交到代码配置库上,这里有一些方法可以告诉git,有哪些文件可以忽略. 创建一个本地的.gitignore 如果你在你的git库(repository)中创建了一个名为.g ...

  2. 【源码解析】Sharding-Jdbc中的算法

    Sharding-jdbc中的很多地方涉及到算法,比如主从配置这块.分库分表这块.本文主要从源码角度介绍下,目前主要包含哪些算法,以及这些算法的内容. 一.读写分离(主从配置) 这块的代码主要在cor ...

  3. linux top结果保存到文本上

    [root@web-DB script]# cat top.sh # !/bin/bash today=`date +%Y%m%d%H%M` yesterday=`date -d "1 da ...

  4. Java提高十五:容器元素比较Comparable&Comparator深入分析

    我们经常用容器来存放元素,通常而言我们是不关系容器中的元素是否有序,但有些场景可能要求容器中的元素是有序的,这个时候用ArrayList  LinkedList  Hashtable HashMap ...

  5. linux环境

    vim命令 http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html 安装YouCompleteMe 按照百度搜索的 ...

  6. canvas图表(4) - 散点图

    原文地址:canvas图表(4) - 散点图 今天开始完成散点图,做完这一节,我的canvas图表系列就算是完成了,毕竟平时最频繁用到的就是这几类图表了:柱状,折线,饼图,散点.经过编写canvas图 ...

  7. Java IO(1)基础知识——字节与字符

    正所谓怕什么来什么,这是知名的“墨菲定律”.Java基础涵盖各个方面,敢说Java基础扎实的人不是刚毕业的学生,就是工作N年的程序员.工作N年的程序员甚至也不敢人人都说Java基础扎实,甚至精通,往往 ...

  8. angularJS的一些用法

    AngularJS 事件指令: ng-click/dblclick ng-mousedown/up ng-mouseenter/leave ng-mousemove/over/out ng-keydo ...

  9. PHP核心技术

    一.PHP核心技术 1.写出一个能创建多级目录的PHP函数(新浪网技术部) <?php /** * 创建多级目录 * @param $path string 要创建的目录 * @param $m ...

  10. struts2 谷歌浏览器保存date类型数据时报错

    一同事发现一个bug,在chrome上保存一个表单时,后台会报错,而在firefox上则可以正常保存. 奇怪的地方在于,后端的程序是同一个,而在浏览器上查看请求header时,两个浏览器对应的字段内容 ...