JS简码转换

APP开发中免不了与服务器交互,而有些项目为了节省流量等原因,会要求不用全码而用简码(比如用户id不用uid,而用a)来交互。可这样的字段名称不易懂,不利于开发。在原生iOS中我们有第三方的YYModel可以轻松实现全码与简码的转换,但像RN等是使用JS来写的,似乎还没有类似的工具。于是我自己写了一个简易的转换工具。
  老规矩,不Bibi,直接上代码:

/**初始化专用返回对象简->全码映射表*/
const loginResp = {
    'a': 'update',
    'b': 'user',
    'c': 'readInfo'
};

const user = {
    'a': 'uid',
    'b': 'userName'
};

const readInfo = {
    'a': 'time',
    'b': 'readers'
};

const readers = {
    'a': 'readerId',
    'b': 'readerName',
    'c': 'status'
};

/**专用返回对象映射表*/
const respMap = {
    'loginResp': loginResp,
    'user': user,
    'readInfo': readInfo,
    'readers': readers
};

/**
 * 简码转全码
 * 
 * 参数说明:
 *  > resp 专用返回对象名称
 *  > json 返回的json
 * 返回说明:
 *  若字段在映射表中,则转为全码;
 *  若字段不在映射表中,则原样返回;
 *  数据结构与值不变
 */
export function changeToFull(resp, json) {
  if (respMap.hasOwnProperty(resp)) {
    let full = {};
    let keyMap = respMap[resp];

    for(var key in json){
      let fullKey = keyMap.hasOwnProperty(key) ? keyMap[key] : key;
      //在我们的项目中是Object需要转换的比数组要多得多,所以作为if的第一判断
      if (json[key] instanceof Object && !(json[key] instanceof Array)) { 
        //如果是Object则递归调用
        full[fullKey] = changeToFull(fullKey, json[key]);
      } else if (json[key] instanceof Array && json[key].length > 0 && json[key][0] instanceof Object && respMap.hasOwnProperty(fullKey)) {
        let tempArray = json[key];
        let tempFullArray = [];
        for (var i = 0; i < tempArray.length; i++) {
          let tempObj = changeToFull(fullKey, tempArray[i]);
          tempFullArray.push(tempObj);
        };
        full[fullKey] = tempFullArray;
      } else {
        full[fullKey] = json[key];
      };
    }
    return full;
  } else{ //映射表中没有,原样返回
    return json;
  };
}

这时候,您可能一脸懵逼——最开始那几个奇怪的常量是干嘛的?其实就是一些返回对象的简->全码对应关系,具体如下表:

图1

  而respMap则是专用返回对象映射表,我们需要去维护这个映射表,下面的方法changeToFull(resp, json)才能正常使用。
  通常服务器返回的内容,无非就是普通数据类型、对象类型与数组三种,上面方法的三个分支也正是针对这三种类型做处理。为了验证该方法对复杂数据结构同样适用,我们模拟一个多种数据类型相互嵌套的返回对象,具体如下:

  "loginResp": {
    "a": false,
    "b":{
      "a": 9527,
      "b": "大圣遛码",
    },
    "c":[{
      "a": "2017-07-07",
      "b":[{
        "a": 666,
        "b": "reader1",
        "c": 0
      }]
    },{
      "a": "2017-07-08",
      "b":[{
        "a": 666,
        "b": "reader1",
        "c": 1
      },{
        "a": 888,
        "b": "reader2",
        "c": 1 
      }]
    }],
  }

这样的数据结构够复杂了吧~数组字典各种嵌套,并且是用简码返回,非常不利于开发理解,于是我们把数据丢到我们的方法里,拿到返回对象再来看看:

{
  "update": false,
  "user":{
    "uid": 9527,
    "userName": "大圣遛码",
  },
  "readInfo":[{
    "time": "2017-07-07",
    "readers":[{
      "readerId": 666,
      "readerName": "reader1",
      "status": 0
    }]
  },{
    "time": "2017-07-08",
    "readers":[{
      "readerId": 666,
      "readerName": "reader1",
      "status": 1
    },{
      "readerId": 888,
      "readerName": "reader2",
      "status": 1 
    }]
  }],
}

这样来看就非常清晰明了了~
  (全码转简码也是类似的,就留给读者朋友们自行发挥啦~)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,389评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 最近遇到诸多诱惑,而这种诱惑是来自于学习的欲望,但我并不是全才,甚至可以说我是有严重的“偏科”情况的。由于身处文化...
    eiqura阅读 173评论 0 0
  • 印章,这一独有的文化形式,在中国沿袭了数千年。几经变更,造型多样,历来为帝王将相、文人雅士所推崇。小小印章,不仅是...
    9a2afe2f3557阅读 327评论 0 2
  • 明白:百分之九十以上的分数 有所投入才有所产出 牛人投入了大量的时间,而且很早 不要夜郎自大 你做得还不错了,只不...
    良辰美LiangChen阅读 91评论 0 0