[原创作品] 对获取多层json值的封装
今天篇头不废话了,交流加群:164858883
在我们接收后端返回的json数据的时候,在数据缺失的时候,如果直接接收会导致致命错误的发生。可能有些同学会说通常都会有,不用判断直接获取也行。之前我也是这么想的,但从用了node + mongodb之后,发现数据库有些数据项没有的时候,前端报错了。后果就是页面完全失去了响应。比如我们要取一个这样的数据 :
$.get(url, function(data){
var dd = data.aa.bb.cc.dd;//aa或bb或cc不存在时,此处会导致致命错误,导致一下代码无法执行
});
在coffee中,dd = data?.aa?.bb?.cc?.dd这样可以解决,生成的js代码是这样的:
var _ref, _ref1;
if (typeof aa !== "undefined" && aa !== null) {
if ((_ref = aa.bb) != null) {
if ((_ref1 = _ref.cc) != null) {
_ref1.dd;
}
}
}
就是一层一层判断,在原生js如果这样写特别麻烦,所以我进行了一次封装,欢迎吐槽。
/**by Steven
* 用于接收多层json数据,在没有属性的情况下不产生Cannot read property 'xxx' of null
* @param jsonArray 传入的数据数组[目标对象,'第一层属性名','第二层属性名'....]
* @param dftVal 当没有找到时返回的默认值
*/
getJsonAttr: function (jsonArray, dftVal) {
//非数组,直接返回,只有数据本身返回,保证数组最少有2个元素
if (dftVal == null) {
dftVal = ''
}
if (jsonArray == null) {
return dftVal
}
if (jsonArray.constructor != Array) {
return jsonArray
}
if (jsonArray.length == 1) {
return jsonArray[0];
}
var temp = jsonArray[0];
var returnVal = null;
//确保传入的第一个值合法
if (!!temp) {
for (i = 1; i < jsonArray.length; i++) {
var key = jsonArray[i];
if (!!temp[key]) {
temp = temp[key];
returnVal = temp;
} else {
returnVal = dftVal;
//键值未找到,中断执行
break;
}
}
}else{
returnVal = dftVal;
}
return returnVal;
}
这篇居然被踢出了博客园首页,真是伤心,他们说介绍的篇幅太少了。好吧,后来我在使用的时候,发现我忘了去判断传入的第一个参数[obj,'param'......]的obj进行判断,如果obj为null或者为undefined的时候,下面的执行会出错。所以改进了下。额,我我发现我改了下代码块的字体大小,然后,就在代码块前加了个span标签。。。。。,这是博客园的bug。不影响阅读。
原创作品,转载请注明出处:http://zhutty.cnblogs.com 加q群:164858883
[原创作品] 对获取多层json值的封装的更多相关文章
- Jquery表单提交后获取返回Json值
1.给form添加id值: <form action="/News/SaveMessage" method="post" accept-charset=& ...
- JS 根据Url参数名称来获取对应的值 方法封装
function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...
- Python 获取MD5加密值
Python 获取MD5加密值方法封装 import hashlib def get_md5(s): """获取MD5加密值 :param s: 需要加密的字符串 :re ...
- asp 获取url 返回值 和 对json 返回值的处理
Function GetHttpPage(HttpUrl,endoce) If endoce = "" Then endoce = "GB2312" If Is ...
- C# 获取Newtonsoft.Json的JObject多层节点内容
json形如 { "object":{ "name":"cwr" }, " } 要获取name的值,则需要构造两个JObject来 ...
- C#:Json数据反序列化为Dictionary并根据关键字获取指定的值
转自曾是土木人原文 C#:Json数据反序列化为Dictionary并根据关键字获取指定的值 Json数据: { "dataSet": { "header": ...
- Jmeter 通过json Extracted 来获取 指定的值的id
在没有 精确或模糊查询的接口时可以使用jmeter 获取指定的值的ID import java.lang.String ; String getTargetName="iphone632g& ...
- (原创)【MAUI】在窗口(页面)关闭后获取其返回值
一.前言 作为一名 Winform 和 WPF 的老用户,没想到 MAUI 上变化那么大. 就像传统的窗口,我弹出一个模式窗口,关闭窗口后是可以获取到窗口的返回值的,即: DialogResult.后 ...
- [原创作品] javascript 实现的web分页器原理
很久没有写博客了,因为最近忙于一些杂七杂八的事情.不过,互联网的价值在于信息共享,因为共享,所以互联网才能飞快发展.博主建了一个技术共享qq群:164858883,因为目前人数还比较少,活跃度还不是很 ...
随机推荐
- 线段树---HDU1394Minimum Inversion Number
此题和上题略有不同,但是大体差不多,不过要把题意转换过来,题目大体意思为, 输入n, 也就是n个数,这些数为0 - (n-1), 这些数刚开始给定输入的顺序, 然后求他的逆序数,然后接着把第一个移到这 ...
- mysqlbinlog查看 binlog日志报错mysqlbinlog: unknown variable 'default-character-set=utf8mb4'
今天,查看mysql slave节点 binlog日志信息时,执行mysqlbinlog命令报错mysqlbinlog: unknown variable 'default-character-set ...
- css07家用电器分类
1.创建一个html页面 <!DOCTYPE html> <html> <head lang="en"> <meta charset=&q ...
- Windows Native API
http://en.wikipedia.org/wiki/Native_API Windows 的原生 API 函数通常在系统启动时(这里其他 Windows 组件还不可用).kernel32.dll ...
- shell编程备忘
1.脚本存放目录 workspace="$(cd "$(dirname "$0")"; pwd)" 2.输出 其中 command 代表指 ...
- Jsp笔记(1)
1. jsp页面中出现中文乱码怎么解决? <%@ page contentType="text/html; charset=GB2312"%> <%@ page ...
- mysql的distinct理解
select distinct id,name from route where update_time>=''; 上面的sql语句的逻辑是两条记录的id,name只要有一个不一样,就算不一样. ...
- GetJsonByDataTable
public string getJsonByModel(DataTable dt) { StringBuilder nsb = new StringBuilder(); ; i < dt.Ro ...
- centos安装redis-3.2.3
这次介绍的是在虚拟机centos下安装redis-3.2.3 首先进入官网http://redis.io/download
- Dev-C++程序正确闪退问题
只需要在主函数最后一句语句上面加一句getchar();即可