Map与数组,对象,JOSN的互相转换

本文介绍JavaScript中Map与其他数据结构(数组、对象、JSON)之间的相互转换方法,包括使用内置方法和自定义函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)Map 转为数组

    const map = new Map([
        ['name','张三'],
        [1,'one'],
        [2,'two'],
        [3,'three'],
    ]);
    console.log(map);//{'name' => '张三', 1 => 'one', 2 => 'two', 3 => 'three'}
    let map0 = [...map.keys()];
    console.log(map0);  //['name', 1, 2, 3]
    let map1 = [...map.values()];
    console.log(map1);  //['张三', 'one', 'two', 'three']
    let map2 = [...map.entries()];
    console.log(map2);  //[Array(2), Array(2), Array(2), Array(2)]
                        //0: (2) ['name', '张三']
                        //1: (2) [1, 'one']
                        //2: (2) [2, 'two']
                        //3: (2) [3, 'three']
                        // length: 4

(2)数组 转为 Map

    let str = [[1,'one'],[2,'two'],[3,'three'],];
    let str0 = new Map(str);
    console.log(str0);  // {1 => 'one', 2 => 'two', 3 => 'three'}

(3)Map 转为对象

    function strMapToObj(strMap){
        let obj = Object.create(null);
        for(let [k,v] of strMap){
            obj[k] = v;
        }
        return obj ;
    }
    const myMap =new Map([
        ['name','张三'],
        ['address','china'],
    ]);
    console.log(strMapToObj(myMap)); //{name: '张三', address: 'china'}

(4)对象转为 Map

//  转换过程:obj ==>数组==>map (对象转为 Map 可以通过`Object.entries()`。    Object.keys() //返回对象的键名    Object.entries() //以数组形式返回对象的键值对)
    let objToMap = {
        'a':1,
        'b':2,
        'name':'张三丰'
    }
    let ToArry = Object.entries(objToMap);//(转成数组) 
    let ToMap = new Map(ToArry);          //(转成map)
    console.log(ToMap);  //{'a' => 1, 'b' => 2, 'name' => '张三丰'}
    
    // 此外,也可以自己实现一个转换函数。
    function objToStrMap(obj){
        let strMap = new Map();
        for(let k of Object.keys(obj)){
            strMap.set(k,obj[k]);
        }
        return strMap ;
    }
    let objStr = {
        'name':'李斯思',
        'age':18
    }
    console.log(objToStrMap(objStr)); //{'name' => '李斯思', 'age' => 18}

(5)Map 转为 JSON

//  转换过程:map==>obj==>json
    function strTOJosn(strMap){
        let obj = Object.create(null);
        for(let [k,v] of strMap){
            obj[k] = v ;
        }
        return obj ;
    }
    function strTOJosn0(strMap){
        // JSON.stringify: 对象转字符串
        return JSON.stringify(strTOJosn(strMap));
    }
    let strMap0 = new Map().set('yes',true).set('no',false);
    console.log(strTOJosn0(strMap0)); //{"yes":true,"no":false}

(6)JSON 转为 Map

//  转换过程:json==>obj===>map  (JSON 转为 Map,正常情况下,所有键名都是字符串。)
    function objToMap1(obj){
        let strMap = new Map();
        for(let k of Object.keys(obj)){
            strMap.set(k,obj[k]);
        }
        return strMap ;
    }
    function josnToMap(josnStr){
        // JSON.parse:字符串转对象
        return objToMap1(JSON.parse(josnStr));
    }
    let josnStr = '{"哈哈": true, "伤心": false}';
    
    console.log(objToMap1(josnStr)); //{'0' => '{', '1' => '"', '2' => '哈', '3' => '哈', '4' => '"', …}
    console.log(josnToMap(josnStr)); //{'哈哈' => true, '伤心' => false}

要将C语言中的结构体数组转换JSON格式,你可以使用第三方库,如 cJSON 或 Jansson。 以下是使用 cJSON 库的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <cJSON.h> typedef struct { char name[50]; int age; double salary; } Employee; int main() { // 创建一个包含多个 Employee 结构体的数组 Employee employees[3]; strcpy(employees[0].name, "John Doe"); employees[0].age = 30; employees[0].salary = 5000.0; strcpy(employees[1].name, "Jane Smith"); employees[1].age = 35; employees[1].salary = 6000.0; strcpy(employees[2].name, "Mike Johnson"); employees[2].age = 40; employees[2].salary = 7000.0; // 创建一个 JSON 数组 cJSON *root = cJSON_CreateArray(); // 遍历结构体数组,将每个结构体转换JSON 对象,并添加到 JSON 数组中 for (int i = 0; i < 3; i++) { cJSON *employeeObj = cJSON_CreateObject(); cJSON_AddStringToObject(employeeObj, "name", employees[i].name); cJSON_AddNumberToObject(employeeObj, "age", employees[i].age); cJSON_AddNumberToObject(employeeObj, "salary", employees[i].salary); cJSON_AddItemToArray(root, employeeObj); } // 将 JSON 数组转换为字符串 char *jsonStr = cJSON_Print(root); // 打印 JSON 字符串 printf("%s\n", jsonStr); // 释放内存 cJSON_Delete(root); free(jsonStr); return 0; } ``` 注意,上述示例代码需要先安装 cJSON 库,并在编译时链接该库。编译命令如下: ```bash gcc example.c -o example -lcjson ``` 执行编译后的可执行文件将输出转换后的JSON字符串。 你可以根据自己的需求修改结构体数组和对应的JSON字段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值