使用js 处理json,更改key的值

由于angularJS一些方法需要特定格式的json字符串,需要将获取得到的json转换一些属性,不想再服务器后台进行再一次查询转换,直接使用js笨办法来吧
mark

    //原json 格式   {"id":"333","name":"xxxx"}
    $scope.jsonToString=function(jsonString){

        var json = JSON.parse(jsonString);//将 json 字符串转换为 json 对象
        var value = "";
        for (var i = 0;i<json.length;i++) {
            value += "{\"id\":\""+json[i].id+"\",\"text\":\""+json[i].text+"\"},"
        }
        value = value.substr(0,value.length - 1);
        return value;
    }
    转换后格式{"id":"333","text":"xxxx"}

改完才发现自己傻了,一开始关键词没搜索对

    直接这样写完事
    $scope.jsonToString = function(jsonString, key) {
    var json = JSON.parse(jsonString);
    for(var i = 0; i < json.length; i++) {
            json[i]["text"] = json[i][key];   //'text'是需要的字段
            delete json[i][key];  //key是要替换为'text'的字段
        }
    return json;


JSON.parse(string) :接受一个 JSON 字符串并将其转换成一个 JavaScript 对象。
JSON.stringify(obj) :接受一个 JavaScript 对象并将其转换为一个 JSON 字符串。
在 JavaScript 中动态修改 JSON 对象的键,可以通过将对象序列化为字符串、操作字符串内容、再解析回对象的方式实现。以下是几种常见的实现方法。 ### 方法一:统一规则修改键(例如去掉键的前两个字符) 适用于所有键的修改规则一致的情况,例如将每个键去掉前两个字符作为新键: ```javascript var array = [ { myid: 1, myname: "小明" }, { myid: 2, myname: "小红" } ]; function convertKey(arr) { let tempString = JSON.stringify(arr); for (let i = 0; i < arr.length; i++) { for (var key in arr[i]) { var reg = new RegExp(`"${key}":`, "g"); tempString = tempString.replace(reg, `"${key.toString().slice(2)}":`); } } return JSON.parse(tempString); } convertKey(array); ``` 该方法通过 `JSON.stringify()` 将数组对象转换为字符串形式,然后利用正则表达式替换键名,最后使用 `JSON.parse()` 将修改后的字符串重新解析为对象数组[^1]。 ### 方法二:根据映射关系修改键(指定每个键的新名称) 适用于每个键需要按照特定映射关系进行修改的情况: ```javascript var array = [ { id: 1, name: "小明" }, { id: 2, name: "小红" } ]; function convertKey(arr) { let tempString = JSON.stringify(arr); let keyMap = { id: "number", name: "title" }; for (var key in keyMap) { var reg = new RegExp(`"${key}":`, "g"); tempString = tempString.replace(reg, `"${keyMap[key]}":`); } return JSON.parse(tempString); } convertKey(array); ``` 此方法定义了一个映射对象 `keyMap`,用于指定每个原始键名对应的新键名,并通过正则表达式批量替换[^1]。 ### 方法三:使用递归函数处理嵌套对象 若对象中存在嵌套结构,可使用递归方式处理每个层级的键名: ```javascript function renameKeys(obj, keyMap) { if (Array.isArray(obj)) { return obj.map(item => renameKeys(item, keyMap)); } else if (obj !== null && typeof obj === "object") { return Object.keys(obj).reduce((acc, key) => { const newKey = keyMap[key] || key; acc[newKey] = renameKeys(obj[key], keyMap); return acc; }, {}); } else { return obj; } } var data = [ { id: 1, name: "小明" }, { id: 2, name: "小红" } ]; const keyMap = { id: "number", name: "title" }; const result = renameKeys(data, keyMap); console.log(result); ``` 该方法避免了字符串操作的风险,适用于结构复杂、嵌套深的对象转换。 ### 方法四:自定义 `toJSON()` 方法控制序列化输出 若希望在序列化时直接控制输出格式,可以为对象定义 `toJSON()` 方法: ```javascript var user = { firstName: "三", lastName: "张", get fullName() { return this.lastName + this.firstName; }, toJSON: function () { return { name: this.lastName + this.firstName }; } }; JSON.stringify(user); // {"name":"张三"} ``` 此方法适用于需要在序列化时自定义输出结构的场景[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值