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. Knowledge_SPA——精研查找算法

    首先保证这一篇分析查找算法的文章,气质与大部分搜索引擎搜索到的文章不同,主要体现在代码上面,会更加高级,会结合到很多之前研究过的内容,例如设计模式,泛型等.这也与我的上一篇面向程序员编程--精研排序算 ...

  2. 这次真的忽略了一些ActiveMQ内心的娇艳

    好久没总结了,内心有点空虚了,所以今天主要给园里的朋友们分享一点儿这几天使用ActiveMQ过程中踩过的小坑,虽然说这东西简单易用,代码几行配置也就几行,问题不大但是后果有点严重,所以就要必要总结一下 ...

  3. POJ1082食物链

    加权并查集入门习题. 传送门http://poj.org/problem?id=1182 下面来记录一下做法: 并查集的作用是询问两个对象时候在同一集合以及将两个非空不相交集合合并. 本题涉及两点之间 ...

  4. jfinal 源码学习

    源由 最近闲来无事,顺带看了下jfinal的源码,以下均为自己的个人理解,如有错误请指定: jfinal 使用 在web.xml中配置JfinalFilter 并定义JfinalConfig的类 自定 ...

  5. [DP]P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome

    题目翻译(借鉴自@ 神犇的蒟蒻) [问题描述] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身 上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身 ...

  6. C语言之++--

    #include<stdio.h>int main(){int num,count=0,i=0;scanf("%d",&num);printf("nu ...

  7. java并发包下的并发工具类

    1.Exchanger 功能:用于线程间数据的交换 应用场景:1)遗传算法,目前还不是特别理解  2)校对工作,假设A,B线程做同一件任务,可以通过数据校验判断两线程是否正确的工作 例子:是一个简单的 ...

  8. PostgreSQL索引描述

    索引方式:唯一索引,主键索引,多属性索引,部分索引,表达式索引. 索引类型:B-Tree,Hash,GiST,GIN以及表达式索引 PostgreSQL所有索引都是“从属索引”,也就是说,索引在物理上 ...

  9. jmeter接口系列:时间戳、加密

    JMeter安装配置 从官网下载JMeter的软件包apache-jmeter-x.x.zip,下载完成之后解压打开jmeter.bat即可. 说明 这里使用的jmeter版本是3.0,jdk版本是j ...

  10. HTMLCSS实现左侧固定宽度右侧内容可滚动

    在做移动端页面的时候,经常会碰到一个div中分左右两个div,左侧div固定宽度或百分比,右侧div中内容左右溢出,需要左右滑动才可以浏览到全部内容,为此写了一个demo. 处理这个问题的核心关键点是 ...