深圳软件测试培训:Json解析
JSON是JavaScript的一个严格的子集,利用JavaScript中的一些模式来表示结构化数据。

一.JSON语法
JSON和XML类型,都是一种结构化的数据表示方式。所以,JSON并不是JavaScript独有的数据格式,其他很多语言都可以对JSON进行解析和序列化。
JSON的语法可以表示三种类型的值:
1.简单值:可以在JSON中表示字符串、数值、布尔值和null。但JSON不支持JavaScript中的特殊值undefined。
2.对象:顾名思义。
3.数组:顾名思义。
简单值
100、“Lee” 这两个量就是JSON的表示方法,一个是JSON数值,一个是JSON字符串。布尔值和null也是有效的形式。但实际运用中要结合对象或数组。
对象
JavaScript对象字面量表示法:
var box = {
name : ‘Lee’,
age : 100
};
而JSON中的对象表示法需要加上双引号,并且不存在赋值运算和分号:
{
“name” : “Lee”, //使用双引号,否则转换会出错
“age” : 100
}
数组
JavaScript数组字面量表示法:
var box = [100, ‘Lee’, true];
而JSON中的数组表示法同样没有变量赋值和分号:
[100, “Lee”, true]
一般比较常用的一种复杂形式是数组结合对象的形式:
[
{
“title” : “a”,
“num” : 1
},
{
“title” : “b”,
“num” : 2
},
{
“title” : “c”,
“num” : 3
}
]

模拟加载JSON文本文件的数据,并且赋值给变量。
var box = ‘[{“name” : “a”,“age” : 1},{“name” : “b”,“age” : 2}]’;
上面这短代码模拟了var box = load(‘demo.json’);赋值过程。因为通过load加载的文本文件,不管内容是什么,都必须是字符串。所以两边要加上双引号。
其实JSON就是比普通数组多了两边的双引号,普通数组如下:
var box = [{name : ‘a’, age : 1},{name : ‘b’, age : 2}];
二.解析和序列化
如果是载入的JSON文件,我们需要对其进行使用,那么就必须对JSON字符串解析成原生的JavaScript值。当然,如果是原生的JavaScript对象或数组,也可以转换成JSON字符串。
对于讲JSON字符串解析为JavaScript原生值,早期采用的是eval()函数。但这种方法既不安全,可能会执行一些恶意代码。
var box = ‘[{“name” : “a”,“age” : 1},{“name” : “b”,“age” : 2}]’;
alert(box); //JSON字符串
var json = eval(box); //使用eval()函数解析
alert(json); //得到JavaScript原生值
ECMAScript5对解析JSON的行为进行规范,定义了全局对象JSON。支持这个对象的浏览器有IE8+、Firefox3.5+、Safari4+、Chrome和Opera10.5+。不支持的浏览器也可以通过一个开源库json.js来模拟执行。JSON对象提供了两个方法,一个是将原生JavaScript值转换为JSON字符串:stringify();另一个是将JSON字符串转换为JavaScript原生值:parse()。
var box = ‘[{“name” : “a”,“age” : 1},{“name” : “b”,“age” : 2}]’; //特别注意,键要用双引号
alert(box);
var json = JSON.parse(box); //不是双引号,会报错
alert(json);

var box = [{name : ‘a’, age : 1},{name : ‘b’, age : 2}]; //JavaScript原生值
var json = JSON.stringify(box); //转换成JSON字符串
alert(json); //自动双引号

在序列化JSON的过程中,stringify()方法还提供了第二个参数。第一个参数可以是一个数组,也可以是一个函数,用于过滤结果。第二个参数则表示是否在JSON字符串中保留缩进。
var box = [{name : ‘a’, age : 1, height : 177},{name : ‘b’, age : 2, height : 188}];
var json = JSON.stringify(box, [‘name’, ‘age’], 4);
alert(json);

如果不需要保留缩进,则不填即可;如果不需要过滤结果,但又要保留缩进,则讲过滤结果的参数设置为null。如果采用函数,可以进行复杂的过滤。
var box = [{name : ‘a’, age : 1, height : 177},{name : ‘b’, age : 2, height : 188}];
var json = JSON.stringify(box, function (key, value) {
switch (key) {
case ‘name’ :
return 'Mr. ’ + value;
case ‘age’ :
return value + ‘岁’;
default :
return value;
}
}, 4);
alert(json);
保留缩进除了是普通的数字,也可以是字符。
还有一种方法可以自定义过滤一些数据,使用toJSON()方法,可以将某一组对象里指定返回某个值。
var box = [{name : ‘a’, age : 1, height : 177, toJSON : function () {
return this.name;
}},{name : ‘b’,age : 2, height : 188, toJSON : function () {
return this.name;
}}];
var json = JSON.stringify(box);
alert(json);

PS:由此可见序列化也有执行顺序,首先先执行toJSON()方法;如果应用了第二个过滤参数,则执行这个方法;然后执行序列化过程,比如将键值对组成合法的JSON字符串,比如加上双引号。如果提供了缩进,再执行缩进操作。
解析JSON字符串方法parse()也可以接受第二个参数,这样可以在还原出JavaScript值的时候替换成自己想要的值。
var box = ‘[{“name” : “a”,“age” : 1},{“name” : “b”,“age” : 2}]’;
var json = JSON.parse(box, function (key, value) {
if (key == ‘name’) {
return 'Mr. ’ + value;
} else {
return value;
}
});
alert(json[0].name);

深圳软件测试培训:Json解析相关推荐

  1. 深圳软件测试培训:Js中的变量

    深圳软件测试培训:Js中的变量 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存 ...

  2. 深圳软件测试培训:Docker下部署MySQL和Wordpress

    深圳软件测试培训:Docker下部署MySQL和Wordpress 检查当前系统版本,Docker要求CentOS必须是64位7版本以上才可以: 1.[root@localhost ~]# cat / ...

  3. 深圳软件测试培训:JavaScript中变量和作用域

    深圳软件测试培训:JavaScript中变量和作用域 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量不是强制类型的,决定了它只是在特定时间用于保存特定值的一个名字而已. ...

  4. 深圳软件测试培训:软件生命周期(SDLC)的六个阶段

    深圳软件测试培训:软件生命周期(SDLC)的六个阶段 1.问题的定义及规划 此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性. 2.需求分析 在确定软件开发可行的情况下,对软件需要 ...

  5. 深圳软件测试培训:简述关系型数据库和非关系型数据库

    深圳软件测试培训:简述关系型数据库和非关系型数据库 1.关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库. 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之 ...

  6. 深圳软件测试培训:事件与事件处理

    深圳软件测试培训:事件与事件处理 什么是事件?例如在页面载入完毕时,将触发onload(载入)事件:当用户单击按钮时,将触发按钮的onclick事件等. 常用事件: onabort: 对象载入被中断时 ...

  7. 深圳软件测试培训:软件测试技术及工具

    深圳软件测试培训:软件测试技术及工具 一.软件测试的发展史 1979年,Glenford Myers的<软件测试艺术>,对测试做了定义:测试是为发现错误而执行的一个程序或者系统的过程.19 ...

  8. 深圳软件测试培训:Selenium断言与验证

    深圳软件测试培训:Selenium断言与验证 一.什么是断言? 验证应用程序的状态是否同所期望的一致.常见的断言包括验证页面内容,如标题或当前位置是否正确等等. 二.断言的四种模式与五种手段 四种模式 ...

  9. 深圳软件测试培训:移动测试ExpandableListView

    深圳软件测试培训:移动测试ExpandableListView 一.ExpandableListView: (一).类结构: java.lang.Object ↳ android.view.View ...

最新文章

  1. 牡丹江2021高考成绩查询,2020年黑龙江牡丹江成人高考成绩查询入口(已开通)...
  2. python买什么书-希望更加深入了解python 有什么书可以推荐?
  3. 《每日一题》738. Monotone Increasing Digits 单调递增的数字
  4. Android 颜色渲染(九) PorterDuff及Xfermode详解
  5. fedora 忘记root密码
  6. centos 7 安装kvm 虚拟机
  7. Spark1.5.1学习笔记汇总
  8. 20130418代码
  9. 职场怪谈:技术面试过了一般HR多久联系?
  10. 成都“小甜甜”:她给了男人希望,男人却被嘲笑X丝
  11. xise php一句话木马,渗透利器 | 常见的WebShell管理工具
  12. linux中快速拷贝大文件,linux下如何实现快速拷贝大文件
  13. 【深度学习】使用opencv在视频上添加文字和标记框
  14. 中国石油大学c语言程序设计答案,中国石油大学C语言程序设计第一册在线作业答案...
  15. 长沙银行“三重奏”:“生态银行”的新玩法
  16. [轉貼]奋斗5年从月薪3500到700万!
  17. 扫雷——关于展开空格的算法
  18. android微信迁移数据,【CSDN博客迁移】Android集成微信支付之-天坑
  19. 程序员和自由工作者如何去找兼职
  20. FCPX插件:屏幕分屏特效插件Stupid Raisins Split Pop

热门文章

  1. 基于RT1052 Aworks使能U盘功能(十九)
  2. 新媒体运营教程:了解短视频核心,让短视频运营脱颖而出
  3. VCS+Verdi脚本化仿真Vivado工程流程
  4. 大数据在金融领域的应用案例解析
  5. 前端开发需要学习什么?掌握哪些技术?
  6. 2021各显卡满载功耗天梯图 显卡能耗比天梯图
  7. 2022年吉林省高职单招(职业倾向性)考试强化训练及答案
  8. Linux:pingpong机制的理解
  9. android ndk开发
  10. 使用Charles进行手机抓包