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]);


相关文章
|
19天前
|
存储 JavaScript 索引
JS中数组的相关方法介绍
JS中数组的相关方法介绍
|
19天前
|
JavaScript 前端开发 索引
JavaScript中与字符串相关的方法
JavaScript中与字符串相关的方法
|
1天前
|
JavaScript 前端开发
11.JavaScript 事件的概念以及绑定方法
11.JavaScript 事件的概念以及绑定方法
|
4天前
|
JavaScript 前端开发
js 操作数组的方法
js 操作数组的方法
14 4
|
5天前
|
JavaScript 前端开发 BI
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
9 1
|
7天前
|
JavaScript 前端开发 算法
< JavaScript小技巧:如何优雅的用【一行代码 】实现Js中的常用功能 >
在开发中,采用简洁的语法和结构,遵循一致的命名规范,具有良好的代码组织和注释,能很好的提高代码的质量。可读性:易于阅读和理解。清晰的命名、简洁的语法和良好的代码结构可以使代码的意图更加明确,降低理解代码的难度,提高代码的可读性。可维护性:易于维护。当代码逻辑清晰、结构简洁时,开发者可以更快速地定位和修复bug,进行功能扩展或修改。同时,可读性高的代码也有助于后续的代码重构和优化。可扩展性:更具有扩展性和灵活性。清晰的代码结构和简洁的代码风格使得添加新功能、修改现有功能或扩展代码更加容易。
< JavaScript小技巧:如何优雅的用【一行代码 】实现Js中的常用功能 >
|
7天前
|
前端开发 JavaScript 容器
JavaScript、CSS像素动画特效代码
此示例创建一个带有像素粒子的容器,每隔300毫秒就会动态添加一个新的像素粒子,然后通过CSS的关键帧动画(`@keyframes`)使它们产生上升和逐渐消失的动画效果。你可以根据需要修改像素粒子的颜色、大小、动画效果和创建速度。
8 0
|
8天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
11天前
|
JavaScript 前端开发
JavaScript Dom方法
JavaScript Dom方法
36 2
|
12天前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
js 垃圾回收机制的方法