js 简易对象转字符串后恢复为简易对象(如 ^a=$1^b=2转对象)

需求描述

现需要将简易对象(属性值仅为数字/字符串)转换为尽可能短的字符串进行传递。

代码实现

let oldObj = {
    
    
  a: 1,
  b: "2",
};

console.log("原对象", oldObj);

let oldObjStr = JSON.stringify(oldObj);

console.log("原对象字符串", oldObjStr, "长度为:", oldObjStr.length);

function obj2str(oldObj) {
    
    
  let newObjStr = "";
  Object.keys(oldObj).forEach((key) => {
    
    
    let value = oldObj[key];
    if (typeof value === "number") {
    
    
      value = "$" + value;
    }
    newObjStr = newObjStr + "^" + key + "=" + value;
  });

  return newObjStr;
}

let newObjStr = obj2str(oldObj);

console.log("新对象字符串", newObjStr, "长度为:", newObjStr.length);

function str2obj(str) {
    
    
  // 按 ^ 分隔字符串
  var key_ValueList = str.split("^");
  var obj = {
    
    };
  var keyValueList;
  key_ValueList.forEach(function (ele, index) {
    
    
    // 按 = 分隔字符串
    keyValueList = key_ValueList[index].split("=");
    if (keyValueList && keyValueList.length === 2 && keyValueList[0]) {
    
    
      var newValue = keyValueList[1];
      // 以 $ 开头的字符串变对象后,数据类型为数字
      if (newValue[0] === "$") {
    
    
        newValue = Number(newValue.substring(1));
      }
      obj[keyValueList[0]] = newValue;
    }
  });
  return obj;
}

let newObj = str2obj(newObjStr);
console.log("恢复后的对象", newObj);

效果如下:

原对象 {
    
     a: 1, b: '2' }
原对象字符串 {
    
    "a":1,"b":"2"} 长度为: 15
新对象字符串 ^a=$1^b=2 长度为: 9
恢复后的对象 {
    
     a: 1, b: '2' }

函数封装

简易对象转指定格式的字符串

function obj2str(oldObj) {
    
    
  let newObjStr = "";
  Object.keys(oldObj).forEach((key) => {
    
    
    let value = oldObj[key];
    if (typeof value === "number") {
    
    
      value = "$" + value;
    }
    newObjStr = newObjStr + "^" + key + "=" + value;
  });

  return newObjStr;
}

指定格式的字符串恢复为简易对象

function str2obj(str) {
    
    
  // 按 ^ 分隔字符串
  var key_ValueList = str.split("^");
  var obj = {
    
    };
  var keyValueList;
  key_ValueList.forEach(function (ele, index) {
    
    
    // 按 = 分隔字符串
    keyValueList = key_ValueList[index].split("=");
    if (keyValueList && keyValueList.length === 2 && keyValueList[0]) {
    
    
      var newValue = keyValueList[1];
      // 以 $ 开头的字符串变对象后,数据类型为数字
      if (newValue[0] === "$") {
    
    
        newValue = Number(newValue.substring(1));
      }
      obj[keyValueList[0]] = newValue;
    }
  });
  return obj;
}

猜你喜欢

转载自blog.csdn.net/weixin_41192489/article/details/131592256