util-10.JSON操作相关(jsonUtil)

/**
 * ========================10.json操作 s========================
 */
var jsonUtil = {
    /**
     * 对象||数组||json数组深拷贝
     */
    "objDeepCopy": function(source) {
        var sourceCopy = source instanceof Array ? [] : {};
        for (var item in source) {
            sourceCopy[item] = typeof source[item] === 'object' ? objDeepCopy(source[item]) : source[item];
        }
        return sourceCopy;
    },

    /**
     * clone对象
     */
    "cloneObj": function(obj) {
        var newObj = {};
        for (var prop in obj) {
            newObj[prop] = obj[prop];
        }
        return newObj;
    },
    /**
     * clone对象---深克隆
     */
    "deepClone": function(obj){
        var resObj = {};
        for(key in obj){/*key/in循环*/
            if(obj[key] instanceof Object){/*如果属性是对象,则再次调用clone()(递归)*/
                resObj[key] = clone(obj[key]);
            }else{
                resObj[key] = obj[key];/*clone*/
            }
        }
        return resObj;/*返回resObj*/
    },
    /**
     * 计算json元素个数
     */
    "getJsonLen": function(obj) {
        var size = 0, key;
        for (key in obj) {
            if (obj.hasOwnProperty(key)) {
                size++;
            }
        }
        return size;
    },

    /**
     * 判断obj是否含有propertyName属性,该方法会忽略掉那些从原型链上继承到的属性
     * @param obj
     * @param propertyName
     * @returns {boolean}
     */
    "hasOwnProperty" : function(obj,propertyName){
        return obj.hasOwnProperty(propertyName);
    },

    /**
     * 返回所有属性名数组
     * @param obj
     * @returns {*}
     */
    "getPropertyNames" : function(obj){
        return Object.getPropertyNames(obj);
    },

    /**
     * 获取所有属性(可枚举属性&不可枚举属性)及对应值
     * @param obj
     */
    "getPropertyNamesVals" : function(obj){
        /**
         * propertyName元素的值,
         * ind元素的索引,
         * array被遍历的数组
         */
        Object.getPropertyNames(obj).forEach(function(propertyName,ind,array){
            console.log(propertyName + " -> " + obj[propertyName],ind,array);
        });
    },

    /**
     * 获取可枚举属性
     * @param obj
     * @returns {string[]}
     */
    "getEnumerableKeys" : function(obj){
        //Object.keys只能返回对象本身具有的可枚举属性,不包含prototype定义的属性,否则用for in
        return Object.keys(obj);
    },

    /**
     * 获取不可枚举属性
     * @param obj
     */
    "getUnEnumerableKeys" : function(obj){
        var allKeys = Object.getPropertyNames(obj);
        var enumerableKeys = Object.keys(obj);
        var UnEnumerableKeys = allKeys.filter(function(propertyName, ind, array){
            var idx = enumerableKeys.indexOf(propertyName);
            if(idx == -1){
                return true;
            }else{
                return false;
            }
        });
    },

    /**
     * 一维数组操作:增删排序
     */
    "oneArrayJsonUtil" : function(){
        var arr = ["A-option1","B-option2","C-option3","D-option4"];
        arr.push("E-option5");  //增
        //删增: 索引为1的选项开始删除1项,再在该位置添加一新项
        arr.splice(1,1,"B-New-option2");

        arr.sort(function(a,b){ //升序排序
            return a-b;  //或者: return a>b;
        });

        arr.sort(function(a,b){ //降序排序
            return b-a;  //或者: return a<b;
        });
    },

    /**
     * json二维数组操作:增删排序
     */
    "twoArrayJsonUtil" : function(){
        /*json增加删除*/
        var test = {};
        test["key1"] = "val1";  //增
        delete test["key1"];  //删

        var arr = [{"name":"name1","age":12},{"name":"name2","age":18},{"name":"name3","age":15}];
        arr.push({"name":"name4", "age":9});  //增
        //删增: 索引为1的选项开始删除1项,再在该位置添加一新项
        arr.splice(1,1,{"name":"name2","age":2});

        /**
         * 定义排序:
         * @param field  //排序字段
         * @param reverse //是否升序
         * @param primer  //排序字段数据类型
         * @returns {function(*=, *=)}
         */
        var sort_by = function(field, reverse, primer){

            var key = primer ?
                function(x) {return primer(x[field])} :
                function(x) {return x[field]};

            reverse = [-1, 1][+!!reverse];

            return function (a, b) {
                return a = key(a), b = key(b), reverse * ((a > b) - (b > a));
            }
        };

        //数组sort方法默认按升序排序
        arr_sort=arr.sort(sort_by('age', true, parseInt)); //根据age,升序
        arr_sort=arr.sort(sort_by('name', false, '')); //根据name,倒序  
    },

    /**
     * json对象合并(数组使用concat)
     需求:设有对象 o1 ,o2,需要得到对象o3
     var o1 = { a:'a' }, o2 = { b:'b' };
     // 则
     ===> var o3 = { a:'a', b:'b' };
     */
    "concatJson": function(){
        /**
         * 方法1:使用JQuery的extend方法
         * 方法定义**:jQuery.extend([deep], target, object1, [objectN])
         > 用一个或多个其他对象来扩展一个对象,返回被扩展的对象。
         > 如果不指定target,则给jQuery命名空间本身进行扩展。这有助于插件作者为jQuery增加新方法。 如果第一个参数设置为true,则jQuery返回一个深层次的副本,递归地复制找到的任何对象(递归合并)。否则的话,副本会与原对象共享结构。 未定义的属性将不会被复制,然而从对象的原型继承的属性将会被复制。
         * @type {{a: string}}
         */
        var o1 = { a:'a' },
            o2 = { b:'b' };

        o3 = $.extend(o1, o2);  // 合并 o1 和 o2, 将结果返回给 o3. 注意: 此时,o1 == o3! 即 o1 被修改
        // 或
        o3 = $.extend({}, o1, o2); // 合并 o1 和 o2, 将结果返回给 o3. 注意: 此时,o1 != o3! 即 o1 没有被修改

        /**
         * 方法2:用 Object.assign();
         * @type {{a: number}}
         */
        var o1 = { a: 1 };
        var o2 = { b: 2 };
        var o3 = { c: 3 };

        var obj = Object.assign(o1, o2, o3);
        console.log(obj); // { a: 1, b: 2, c: 3 }
        console.log(o1);  // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。

        /**
         * 方法3:遍历赋值法
         * @param o
         * @param n
         */
        var extend=function(o,n){
            for (var p in n){
                o[p]=n[p];
            }
        };
        //类似于直接赋值增加属性:
        o3=o1;
        o3['b']='b';
        // o3 ={ o1:'a', o2:'b' };
    }
};

function Person(){
    this.name = "xxx";
}
Person.prototype.sex = "男";
Person.prototype = {
    "grade" : "1年级",
    "age" : 12
};

var person1 = new Person();
Object.defineProperty(person1,"favorites",{
    "value" : "fa",
    "enumerable" : true
})

for(var i in person1){
    console.log(i,person1[i]);
}
console.log(Object.keys(person1));
console.log(Object.getPropertyNames(person1));


/**
 *   jQuery之$.extend()的js实现方法
 eg:
 var options=window.extend(defaultObj,optionsObj);
 */
void function(global){
    var _isObject = function(o){
        return Object.prototype.toString.call(o) === '[object Object]';
    }

    var _extend = function self(destination, source) {
        var property;
        for (property in destination) {
            if (destination.hasOwnProperty(property)) { // 若destination[property]和source[property]都是对象,则递归
                if (_isObject(destination[property]) && _isObject(source[property])) {
                    self(destination[property], source[property]);
                } // 若source[property]已存在,则跳过
                if (source.hasOwnProperty(property)) {
                    continue;
                } else {
                    source[property] = destination[property];
                }
            }
        }
    }

    var extend = function(){
        var arr = arguments;
        var result = {};
        var i;
        if (!arr.length)
            return {};
        for (i = arr.length - 1; i >= 0; i--) {
            if (_isObject(arr[i])) {
                _extend(arr[i], result);
            };
        }

        arr[0] = result; return result;
    }

    global.extend = extend;
}(window)

/**
 * ========================10.json操作 e========================
 */

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JsonUtiljson转map的方法可以通过使用fastjson库来实现。首先,我们需要使用Fastjson中的JSON类的parseObject方法将json字符串转化为JSONObject对象。然后,我们可以通过JSONObject对象的getInnerMap方法获取其内部的键值对映射。最后,我们可以将这个映射转化为Map<String, Object>对象。 以下是一个示例代码,展示了如何使用JsonUtil类的json转map方法: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import java.util.Map; public class JsonUtil { public static Map<String, Object> jsonToMap(String json) { JSONObject jsonObject = JSON.parseObject(json); Map<String, Object> map = jsonObject.getInnerMap(); return map; } } ``` 使用上面的代码,你可以将json字符串转换为Map<String, Object>对象。例如: ```java String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; Map<String, Object> resultMap = JsonUtil.jsonToMap(jsonString); System.out.println(resultMap); ``` 输出结果将会是: ``` {name=John, age=30, city=New York} ``` 通过这种方式,你可以使用JsonUtiljson转map方法来将json字符串转换为Map<String, Object>对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [json转map,json转bean](https://blog.csdn.net/qq_34031691/article/details/131327811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [转换复杂的JSON对象为Map对象](https://blog.csdn.net/segegefe/article/details/124491317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值