将json当数据库一样操作的javascript lib

前端技术 2023/09/09 JavaScript

前段时间工作中用到Json数据,希望将一些简单的增删改查放到客户端来做,这样也能减少服务器端的压力。分别查找了几个可以对Json进行操作的javascript 类库,最终选定了TAFFY DB。原因如下:
1、使用的是BSD开源协议,不用担心商业使用限制。
2、一直在有人进行更新,并且不和其他框架(如Jquery,YUI,Dojo等)冲突
3、功能齐全——增删改查、排序等等都有了。
4、小巧,压缩后只有17k大小。
所以,工作完后,将这篇文章写出来,并推荐这个类库给大家,希望能够帮助到那些正在寻找Json 查询修改的Coder们一些帮主,并和大家一起交流学习。

TAFFY DB 基本信息
项目主页:http://taffydb.com/
托管地址:https://github.com/typicaljoe/taffydb

使用方法:

复制代码 代码如下:

<script type=\"text/javascript\" charset=\"utf-8\" src=\"taffy-min.js\"></script>

复制代码 代码如下:

// 创建空白数据库
var db = TAFFY();
//创建包含一条数据的数据库
var db = TAFFY({record:1,text:\"example\"})
 //通过数组创建数据库,数组的元素为json格式的object(可多条)
var db = TAFFY([{record:1,text:\"example\"}])     
// 通过json格式字符串创建数据(可多条)   
var db = TAFFY(\'[{\"record\":1,\"text\":\"example\"}]\')

查询数据:
首先构建一个数据库,以后的示例,都以这个数据库为准。
复制代码 代码如下:

var db = TAFFY([//构建一个城市的数据库,字段分别代表 省份、城市名、邮政编码、排序
    { province:\"北京\", cityName:\"北京\", zipCode:\"10001\", orderNum:1},
    { province:\"河北\", cityName:\"石家庄\", zipCode:\"10002\", orderNum:2},
    { province:\"河北\", cityName:\"保定\", zipCode:\"10003\", orderNum:3},
    { province:\"河北\", cityName:\"承德\", zipCode:\"10004\", orderNum:4},
]);

1、根据字段值进行查询
复制代码 代码如下:

var cities = db({province:\"河北\"});  //查询所有province 值为\"河北\"的数据,并返回TAFFY格式的object
//console.log这个函数,只要在有控制台的浏览器中,都可以用,比如火狐的firebug,还有谷歌浏览器的开发人员工具(按F12可呼出)
for(var i = 0; i< cities().count(); i++){
    //get()这个TAFFY的函数,可以将TAFFY的object数据转化为json格式
    console.log(\"城市名\", cities().get()[i].cityName);
}
console.log(\"第一条数据为:\", cities().first()); // first()这个函数可以返回json格式的第一条数据

2、根据条件查询 (具体条件请查阅 http://www.taffydb.com/writingqueries 的“Comparison Operators”小节

复制代码 代码如下:

//单条件查询
//查询 排序大于 2 的所有数据
db({ orderNum:{\'>\':2}});
//范围查询
//查询排序大于2 并且 小于 4 的所有数据
db({ orderNum:{\'>\':2, \'<\':4}});
//多条件\"与\" 查询
//查询大于2,并且 小于4 ,并且 省份为 河北省 的数据
db({ orderNum:{\'>\':2, \'<\':4}, province:\"河北\"});
//多条件\"或\"查询
// 查询 排序  大于2 或者 小于 4 的数据
db({ orderNum:{\'>\':2}}, { orderNum : {\'<\':4}});
//指定数据内查询(where in)
// 查询 城市为  保定、石家庄 的数据
db({ cityName:[\'保定\',\'石家庄\']});

3、排序

复制代码 代码如下:

//单条件排序
db().order(\"orderNum desc\");    // 根据orderNum 倒序
db().order(\"orderNum\"); //正序
//多字段排序
db().order(\"orderNum desc, zipCode asc\"); //先按照orderNum倒序,然后按照 zipCode正序

4、计算

复制代码 代码如下:

//求最大值
db().max(\"orderNum\"); //得到orderNum的最大值,并返回
//求最小值
db().min(\"orderNum\"); //得到最小的 orderNum
//求和
db().sum(\"orderNum\"); //得到所有orderNum的和
//得到第一条数据
db().first();  //取第一条数据,并返回json格式
//得到最后一条数据
db().last(); //取最后一条,并返回json格式
//这个可以用来分页 哈哈
db().start(15).limit(20); //从第15条数据开始,往后取20条

5、内置函数查询,有些数据,需要在查询的时候,就做一些计算,稍显复杂,可以通过内置函数来查询

复制代码 代码如下:

db().filter(function(){
    return this.cityName.length > 2;
});

添加数据

复制代码 代码如下:

//添加一条数据
db.insert({province:\"湖南\", cityName:\"长沙\", zipCode:\"10005\", orderNum:5});

删除数据

复制代码 代码如下:

//删除全部数据
db().remove();
//删除所有orderNum 大于5的数据
db({orderNum:{\'>\':5}}).remove();

修改数据

复制代码 代码如下:

//将所有数据 的 orderNum修改为1
db().update({orderNum:1});

//将城市名为北京的 邮政编码修改为 100000
db({cityName:\"北京\"}).update({zipCode:\"100000\"})

//将所有的orderNum 都加1
db().update(function(){
    this.orderNum = this.orderNum + 1;
    return this;
});
/*
特别说明:在有的时候,增删查都没有问题,唯独修改的时候,会碰到报错:找不到字段
这应该是TAFFY的一个小bug,遇到这个情况,重新初始化一下就好,需要用到一个函数
stringify(),这个是将TAFFY DB 的所有数据,变成字符串,所以遇到这种情况,就可以这样做了:
*/
db = TAFFY(db().stringify()); //将内容重新初始化
db().update({column:value});

本文地址:https://www.stayed.cn/item/25527

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。