JavaScript原生代码处理JSON的一些高频次方法合集

简介: JavaScript原生代码处理JSON的一些高频次方法合集


let json = {
    /**判断JSON格式*/ 
    isJSON: function (str) {
        if (typeof str == "string") {
            try {
                var obj = JSON.parse(str);
                if (typeof obj == "object" && obj) {
                    return true;
                } else {
                    return false;
                }
            } catch (e) {
                return false;
            }
        } else if (typeof str == "object") {
            return Object.prototype.toString.call(obj).toLocaleLowerCase() == "[object object]" && !obj.length;
        }
        return false;
    }, 
/**合并string类型的json*/ 
    mergeJsonString: function () {
        return JSON.parse((jsonStr1 + jsonStr2).replace(/}{/g, ","));
    }, /**拼接两个json*/ mergeJsonObject: function (json1, json2) {
        for (var i in json1) {
            json2[i] = json1[i];
        }
        return json2;
    }, 
/**将JSON对象转换为字符串*//** param 将要转为URL参数字符串的对象,key URL参数字符串的前缀, encode true/false 是否进行URL编码 默认为true return URL参数字符串,index不需要传参*/ 
    toGetString: function (param, key, encode, index, firstStr='?') {
        index || (index = 0);
        index++;
        if (param == null) return;
        var ps = "";
        var t = typeof (param);
        if (t == "string" || t == "number" || t == "boolean") {
            ps += "&" + key + "=" + ((encode == null || encode) ? encodeURIComponent(param) : param);
        } else {
            for (var i in param) {
                var k = key == null ? i : key + (param instanceof Array ? "[" + i + "]" : "." + i);
                ps += json.toGetString(param[i], k, encode, index, firstStr);
            }
        }
        index == 1 && (ps = ps.replace("&", firstStr));
        return ps;
        /*测试用例*/
        /* var obj = {a: '1', 'b': {c: '3'}, d: [{e: '4'}]}; alert(json.toGetString(obj)); alert(json.toGetString(obj, 'CLASS'));*/
    }, 
/**JSON转GET请求参数(只针对包含一个层级的json格式)*/ 
    toGetStringForOneDepthLevel: function (json, firstStr='?') {
        return firstStr+JSON.stringify(json).replace(/\t|\n|\r|\"|\{|\}/g, "").replace(/,/g, "&").replace(/:/g, "=");
    }, 
/**GET请求参数转JSON(只针对包含一个层级的json格式)*/ 
    fromGetStringForOneDepthLevel: function (getString) {
        return JSON.parse("{\"" + getString.substr(1 + getString.indexOf("?")).replace(/&/g, "\",\"").replace(/=/g, "\":\"") + "\"}");
    }, 
/**格式化json字符串格式*/
    string: function (json) {
        return JSON.stringify(json, null, 4);
    }, 
/**获取json对象一级属性个数*/ 
    length: function (obj) {
        var count = 0;
        for (var i in obj) {
            count++;
        }
        return count;
    },
    //比较两个json是否相同
    isObj(object) {
        return object && typeof (object) == "object" && Object.prototype.toString.call(object).toLowerCase() == "[object object]";
    },
    isArray(object) {
        return object && typeof (object) == "object" && object.constructor == Array;
    },
    getLength(object) {
        var count = 0;
        for (var i in object) count++;
        return count;
    },
    compare(objA, objB) {
        if (!this.isObj(objA) || !this.isObj(objB)) return false; //判断类型是否正确
        if (this.getLength(objA) != this.getLength(objB)) return false; //判断长度是否一致
        return this.compareObj(objA, objB, true);//默认为true
    },
    compareObj(objA, objB, flag) {
        for (var key in objA) {
            if (!flag) //跳出整个循环
                break;
            if (!objB.hasOwnProperty(key)) {
                flag = false;
                break;
            }
            if (!this.isArray(objA[key])) { //子级不是数组时,比较属性值
                if (objB[key] != objA[key]) {
                    flag = false;
                    break;
                }
            } else {
                if (!this.isArray(objB[key])) {
                    flag = false;
                    break;
                }
                var oA = objA[key], oB = objB[key];
                if (oA.length != oB.length) {
                    flag = false;
                    break;
                }
                for (var k in oA) {
                    if (!flag) //这里跳出循环是为了不让递归继续
                        break;
                    flag = this.compareObj(oA[k], oB[k], flag);
                }
            }
        }
        return flag;
    }
};
//去掉值为null或undefined的对象属性
Object.keys(d).forEach(k=>d[k]==null&&delete d[k]);
 
//去掉值为null或undefined或''的对象属性
Object.keys(d).forEach(k=>(d[k]==null||d[k]==='')&&delete d[k]);


相关文章
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
1461 0
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
1475 80
|
9月前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
11月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
331 1
|
JavaScript
JS代码的一些常用优化写法
JS代码的一些常用优化写法
209 0
|
JavaScript 前端开发
四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现
原文:四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现  虽然说现在官方的自带插件已经有很多了,但是有时候往往不能满足我们的需求,下面我简单介绍一些 常见的四种提示弹出框(success,loading,error,w...
2759 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
458 2
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
347 1
JavaScript中的原型 保姆级文章一文搞懂
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
227 0