巧用underscore.js处理复杂的json
underscore.js是非常小巧的js工具库,特别方便处理数组,对象,json等
引入underscore.js:
var _ = require('underscore');
原始api列表
{ liveSessionDTOS: [ { sessionId: "xx", userId: xx, ..... playingGame: false, gameSessionDTO: null, liveScore: { .... } } ] }
我们关心的是gameSessionDTO,这个游戏列表里的游戏是不固定的,要按游戏计数并存入mysql。如果每个游戏一列是不行的,因为无法确定。所以只能把json存到一个string列中(ps:mysql 5.7支持json列了,但本文不用)
var gameinfos = _.compact(_.pluck(liveList, 'gameSessionDTO'));
pluck是按属性提取为一个数组,compact是过滤掉js false的数据,这里是过滤空值,这样就做成了
{ gameId: 2, icon: "xxx", name: "game a" }
的列表,然后我们再用countby按name统计
var game_online = _.countBy(gameinfos, function (g) { return g.name; });
就得到了我们要的json并存入mysql
解析的部分:
从mysql里读出来后,利用_.pick抽取需要的属性为一个新的json,结合其他方法再行处理
常用方法:
_.chain:像jquery一样的链式操作,如_.chain(xx).compact().map(function(g){return g.name;}).value()
_.map, _.reduce:经典的mapreduce方法
_.clone:深拷贝一个对象,数组。生成完全不同的对象
sort of, I have some experience in the domain of database(MySQL/mongo), java, python, front-end, etc. I'll willing to give and accept bits of help from others.
now base in Singapore.