將json當(dāng)數(shù)據(jù)庫一樣操作的javascript lib
前段時(shí)間工作中用到Json數(shù)據(jù),希望將一些簡(jiǎn)單的增刪改查放到客戶端來做,這樣也能減少服務(wù)器端的壓力。分別查找了幾個(gè)可以對(duì)Json進(jìn)行操作的javascript 類庫,最終選定了TAFFY DB。原因如下:
1、使用的是BSD開源協(xié)議,不用擔(dān)心商業(yè)使用限制。
2、一直在有人進(jìn)行更新,并且不和其他框架(如Jquery,YUI,Dojo等)沖突
3、功能齊全——增刪改查、排序等等都有了。
4、小巧,壓縮后只有17k大小。
所以,工作完后,將這篇文章寫出來,并推薦這個(gè)類庫給大家,希望能夠幫助到那些正在尋找Json 查詢修改的Coder們一些幫主,并和大家一起交流學(xué)習(xí)。
TAFFY DB 基本信息
項(xiàng)目主頁:http://taffydb.com/
托管地址:https://github.com/typicaljoe/taffydb
使用方法:
<script type="text/javascript" charset="utf-8" src="taffy-min.js"></script>
// 創(chuàng)建空白數(shù)據(jù)庫
var db = TAFFY();
//創(chuàng)建包含一條數(shù)據(jù)的數(shù)據(jù)庫
var db = TAFFY({record:1,text:"example"})
//通過數(shù)組創(chuàng)建數(shù)據(jù)庫,數(shù)組的元素為json格式的object(可多條)
var db = TAFFY([{record:1,text:"example"}])
// 通過json格式字符串創(chuàng)建數(shù)據(jù)(可多條)
var db = TAFFY('[{"record":1,"text":"example"}]')
查詢數(shù)據(jù):
首先構(gòu)建一個(gè)數(shù)據(jù)庫,以后的示例,都以這個(gè)數(shù)據(jù)庫為準(zhǔn)。
var db = TAFFY([//構(gòu)建一個(gè)城市的數(shù)據(jù)庫,字段分別代表 省份、城市名、郵政編碼、排序
{ 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、根據(jù)字段值進(jìn)行查詢
var cities = db({province:"河北"}); //查詢所有province 值為"河北"的數(shù)據(jù),并返回TAFFY格式的object
//console.log這個(gè)函數(shù),只要在有控制臺(tái)的瀏覽器中,都可以用,比如火狐的firebug,還有谷歌瀏覽器的開發(fā)人員工具(按F12可呼出)
for(var i = 0; i< cities().count(); i++){
//get()這個(gè)TAFFY的函數(shù),可以將TAFFY的object數(shù)據(jù)轉(zhuǎn)化為json格式
console.log("城市名", cities().get()[i].cityName);
}
console.log("第一條數(shù)據(jù)為:", cities().first()); // first()這個(gè)函數(shù)可以返回json格式的第一條數(shù)據(jù)
2、根據(jù)條件查詢 (具體條件請(qǐng)查閱 http://www.taffydb.com/writingqueries 的“Comparison Operators”小節(jié)
//單條件查詢
//查詢 排序大于 2 的所有數(shù)據(jù)
db({ orderNum:{'>':2}});
//范圍查詢
//查詢排序大于2 并且 小于 4 的所有數(shù)據(jù)
db({ orderNum:{'>':2, '<':4}});
//多條件"與" 查詢
//查詢大于2,并且 小于4 ,并且 省份為 河北省 的數(shù)據(jù)
db({ orderNum:{'>':2, '<':4}, province:"河北"});
//多條件"或"查詢
// 查詢 排序 大于2 或者 小于 4 的數(shù)據(jù)
db({ orderNum:{'>':2}}, { orderNum : {'<':4}});
//指定數(shù)據(jù)內(nèi)查詢(where in)
// 查詢 城市為 保定、石家莊 的數(shù)據(jù)
db({ cityName:['保定','石家莊']});
3、排序
//單條件排序
db().order("orderNum desc"); // 根據(jù)orderNum 倒序
db().order("orderNum"); //正序
//多字段排序
db().order("orderNum desc, zipCode asc"); //先按照orderNum倒序,然后按照 zipCode正序
4、計(jì)算
//求最大值
db().max("orderNum"); //得到orderNum的最大值,并返回
//求最小值
db().min("orderNum"); //得到最小的 orderNum
//求和
db().sum("orderNum"); //得到所有orderNum的和
//得到第一條數(shù)據(jù)
db().first(); //取第一條數(shù)據(jù),并返回json格式
//得到最后一條數(shù)據(jù)
db().last(); //取最后一條,并返回json格式
//這個(gè)可以用來分頁 哈哈
db().start(15).limit(20); //從第15條數(shù)據(jù)開始,往后取20條
5、內(nèi)置函數(shù)查詢,有些數(shù)據(jù),需要在查詢的時(shí)候,就做一些計(jì)算,稍顯復(fù)雜,可以通過內(nèi)置函數(shù)來查詢
db().filter(function(){
return this.cityName.length > 2;
});
添加數(shù)據(jù)
//添加一條數(shù)據(jù)
db.insert({province:"湖南", cityName:"長(zhǎng)沙", zipCode:"10005", orderNum:5});
刪除數(shù)據(jù)
//刪除全部數(shù)據(jù)
db().remove();
//刪除所有orderNum 大于5的數(shù)據(jù)
db({orderNum:{'>':5}}).remove();
修改數(shù)據(jù)
//將所有數(shù)據(jù) 的 orderNum修改為1
db().update({orderNum:1});
//將城市名為北京的 郵政編碼修改為 100000
db({cityName:"北京"}).update({zipCode:"100000"})
//將所有的orderNum 都加1
db().update(function(){
this.orderNum = this.orderNum + 1;
return this;
});
/*
特別說明:在有的時(shí)候,增刪查都沒有問題,唯獨(dú)修改的時(shí)候,會(huì)碰到報(bào)錯(cuò):找不到字段
這應(yīng)該是TAFFY的一個(gè)小bug,遇到這個(gè)情況,重新初始化一下就好,需要用到一個(gè)函數(shù)
stringify(),這個(gè)是將TAFFY DB 的所有數(shù)據(jù),變成字符串,所以遇到這種情況,就可以這樣做了:
*/
db = TAFFY(db().stringify()); //將內(nèi)容重新初始化
db().update({column:value});
寫到這里,我想這個(gè)簡(jiǎn)單的教程也就算是可以了,已經(jīng)方便小菜們快速上手這個(gè)類庫了。
當(dāng)然,其中還有很多是我沒有去提及,需要自己去查詢的,比如模糊查詢等等,更加復(fù)雜的操作。大家可以去項(xiàng)目的官方主頁去看。(英文)
- JSON數(shù)據(jù)轉(zhuǎn)換成Java對(duì)象的方法
- java的json解析類庫使用示例
- java 和 json 對(duì)象間轉(zhuǎn)換
- java對(duì)象序列化與反序列化的默認(rèn)格式和json格式使用示例
- javascript實(shí)現(xiàn)json頁面分頁實(shí)例代碼
- java解析任意層數(shù)json字符串的方法
- javascript生成json數(shù)據(jù)簡(jiǎn)單示例分享
- javascript:json數(shù)據(jù)的頁面綁定示例代碼
- java反射實(shí)現(xiàn)javabean轉(zhuǎn)json實(shí)例代碼
- 對(duì)Java中JSON解析器的一些見解
- java使用淘寶API讀寫json實(shí)現(xiàn)手機(jī)歸屬地查詢功能代碼
- JavaScript Ajax Json實(shí)現(xiàn)上下級(jí)下拉框聯(lián)動(dòng)效果實(shí)例代碼
- javascript打印輸出json實(shí)例
- java使用JSONObject實(shí)例
- java與javascript之間json格式數(shù)據(jù)互轉(zhuǎn)介紹
- javascript仿php的print_r函數(shù)輸出json數(shù)據(jù)
- java json 省市級(jí)聯(lián)實(shí)例代碼
- java生成json數(shù)據(jù)示例
相關(guān)文章
clipboard.js在移動(dòng)端復(fù)制失敗的解決方法
最近在使用clipboard.js碰到的一個(gè)小問題,通過查找相關(guān)資料解決了,所以下面這篇文章主要給大家介紹了關(guān)于clipboard.js在移動(dòng)端復(fù)制失敗的解決方法,需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06JS中new?Blob()詳解及blob轉(zhuǎn)file示例
這篇文章主要給大家介紹了關(guān)于JS中new?Blob()詳解及blob轉(zhuǎn)file的相關(guān)資料,Blob?Blob(Binary?Large?Object)表示二進(jìn)制類型的大對(duì)象,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11uni-app實(shí)現(xiàn)數(shù)據(jù)上拉加載更多功能實(shí)例
數(shù)據(jù)列表在很多時(shí)候,經(jīng)常會(huì)用到,下面這篇文章主要給大家介紹了關(guān)于uni-app實(shí)現(xiàn)數(shù)據(jù)上拉加載更多功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08JavaScript Ajax Json實(shí)現(xiàn)上下級(jí)下拉框聯(lián)動(dòng)效果實(shí)例代碼
這篇文章主要介紹了JavaScript Ajax Json實(shí)現(xiàn)上下級(jí)下拉框聯(lián)動(dòng)效果實(shí)例代碼,有需要的朋友可以參考一下2013-11-11基于Leaflet的Webgis經(jīng)緯網(wǎng)格功能實(shí)現(xiàn)
本文將介紹一款Leaflet的經(jīng)緯網(wǎng)插件,基于這款經(jīng)緯網(wǎng)插件,詳細(xì)介紹如何實(shí)現(xiàn)經(jīng)緯網(wǎng)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2023-12-12document.write()及其輸出內(nèi)容的樣式、位置控制
document.write(),用于簡(jiǎn)單的打印內(nèi)容到頁面上,可以逐字打印你需要的內(nèi)容,既然可以輸出變量,肯定會(huì)想要去控制下變量的顯示,比如位置以及樣式2013-08-08Javascript 網(wǎng)頁黑白效果實(shí)現(xiàn)代碼(兼容IE/FF等)
今天在網(wǎng)上看到有人推薦的一個(gè)不錯(cuò)的方法,試了一下,效果還是可以的,可以自定義讓網(wǎng)頁的某一部分變成灰度顏色(黑白)。2010-04-04