繁体   English   中英

如何将json文件导入indexeddb?

[英]How to import json file into indexeddb?

我正在做一个在 IndexedDB 中存储一些数据的应用程序,但我想首先加载我的 json 文件中的一些数据。

这是我的 json 文件:

{
  "ciudades":[
    {
      "ciudad":"Asuncion",
      "latitud":-25.2985296,
      "longitud":-57.6710677
    },
    {
      "ciudad":"Caaguazu",
      "latitud":-25.465034,
      "longitud":-56.0183859
    },
    {
      "ciudad":"Ciudad del Este",
      "latitud":-25.4933441,
      "longitud":-54.6710438
    },
     {
      "ciudad":"San Pedro",
      "latitud":-24.1586759,
      "longitud":-56.636503
    },
     {
      "ciudad":"Pedro Juan Caballero",
      "latitud":-22.5450875,
      "longitud":-55.7618963
    }
 ]
}

你跟着步骤

步骤 1阅读 mozilla 网站

步骤 2 创建 indexedDB

var ciudades = [
{
  "ciudad":"Asuncion",
  "latitud":-25.2985296,
  "longitud":-57.6710677
},
{
  "ciudad":"Caaguazu",
  "latitud":-25.465034,
  "longitud":-56.0183859
},
{
  "ciudad":"Ciudad del Este",
  "latitud":-25.4933441,
  "longitud":-54.6710438
},
 {
  "ciudad":"San Pedro",
  "latitud":-24.1586759,
  "longitud":-56.636503
},
 {
  "ciudad":"Pedro Juan Caballero",
  "latitud":-22.5450875,
  "longitud":-55.7618963
}
];

var IDBSetting = {
    name: "indexedDBName",
    version: 1,
    tables: [{
        tableName: "ciudades",
        keyPath: "seq",
        autoIncrement: true,
        index: ["ciudad", "latitud", "longitud],
        unique: [false, false, false]
    }]
};

! function() {
    console.log("indexeDB init");

    var req = indexedDB.open(IDBSetting.name, IDBSetting.version);

    req.onsuccess = function(event) {
        console.log("indexedDB open success");
    };

    req.onerror = function(event) {
        console.log("indexed DB open fail");
    };

    //callback run init or versionUp
    req.onupgradeneeded = function(event) {
        console.log("init onupgradeneeded indexedDB ");
        var db = event.target.result;

        for (var i in IDBSetting.tables) {
            var OS = db.createObjectStore(IDBSetting.tables[i].tableName, {
                keyPath: IDBSetting.tables[i].keyPath,
                autoIncrement: IDBSetting.tables[i].autoIncrement
            });

            for (var j in IDBSetting.tables[i].index) {
                OS.createIndex(IDBSetting.tables[i].index[j], IDBSetting.tables[i].index[j], {
                    unique: IDBSetting.tables[i].unique[j]
                });
            }
        }
    }
}();

第 3 步添加数据

var IDBFuncSet = {
    //write
    addData: function(table, data) {
        var req = indexedDB.open(IDBSetting.name, IDBSetting.version);

        req.onsuccess = function(event) {
            try {
                console.log("addData indexedDB open success");
                var db = req.result;
                var transaction = db.transaction([table], "readwrite");
                var objectStore = transaction.objectStore(table);
                var objectStoreRequest = objectStore.add(data);
            } catch (e) {
                console.log("addDataFunction table or data null error");
                console.log(e);
            }

            objectStoreRequest.onsuccess = function(event) {
                //console.log("Call data Insert success");
            }
            objectStoreRequest.onerror = function(event) {
                console.log("addData error");
            }
        };

        req.onerror = function(event) {
            console.log("addData indexed DB open fail");
        };
    }
}

for(var i in ciudades){
   IDBFuncSet.addData("ciudades",ciudades[i]);
}

第 4 步获取数据

IDBFuncSet.getAllData = function(arr, table) {
    try {
        var req = indexedDB.open(IDBSetting.name, IDBSetting.version);

        req.onsuccess = function(event) {
            var db = req.result;
            var transaction = db.transaction([table], "readonly");
            var objectStore = transaction.objectStore(table);

            var objectStoreRequest = objectStore.openCursor();

            objectStoreRequest.onsuccess = function(event) {
                var cursor = event.target.result;
                if (cursor) {
                    arr.push(cursor.value);
                    cursor.continue();
                } else {

                }
            }
        };
        req.onerror = function(event) {
            console.log("getAllData indexed DB open fail");
        };
    } catch (e) {
        console.log(e);
    }
}
var ciudadesArr = [];
IDBFuncSet.getAllData(ciudadesArr, "ciudades");

console.log(ciudadesArr);

我希望这有帮助

多亏了 android-indexeddb包,就是我的做法。

angular.module('yourApp', ['indexedDB'])
    .config(function($indexedDBProvider) {
        $indexedDBProvider
            .connection('dbName')
            .upgradeDatabase(1, function(event, db, tx) {
                var objStore = db.createObjectStore('storeOne', { keyPath: 'stop_id' });
                objStore.createIndex('store_id', 'store_id', { unique: false });
            })
            // the next upgradeDatabase() function is necessary if you 
            // wish to create another datastore
            .upgradeDatabase(2, function(event, db, tx) {
                var secondObjectStore = db.createObjectStore('storeTwo', { keyPath: 'my_id' });
                secondObjectStore.createIndex('another_id', 'another_id', { unique: false });
            });
    })

然后在我的控制器中:

angular.module('yourApp')
    .controller('homeCtrl', ['$scope', '$http', '$indexedDB', function($scope, $http, $indexedDB) {
        $scope.objects = [];
        var loadJSON = function(file_name) { ... //load the json file in here}

        $indexedDB.openStore('storeOne', function(store) {
            var loaded = loadJSON('file_name.json');
            store.upsert(loaded).then(function(e) {
                console.log('added successfully');
            });
        });        

        $indexedDB.openStore('times', function(store) {
            var loaded = loadJSON('file_name.json');
            store.upsert(loaded).then(function(e) {
                console.log('added successfully');
            });
        });
    }]);

查看项目页面以了解更多关于此包袖子的技巧。

虽然这个 angular-indexeddb 页面支持查询,但对于像连接这样的高级查询,您可能需要考虑 ydn-db

使用这两个包获得一些非常好的工作流程。

对于 loadJSON() 函数,它可能是这样的:

var loadJSON = function(file_name) {
    var data;
    $.ajax({
        url: '../data/' + file_name,
        dataType: 'json',
        async: false,
        success: function(res_data) {
            data = res_data;
            console.log('Loaded ' + file_name + ' nicely');
        },
        error: function(err) {
            console.log('error happened');
        }
    });
    return data;
}

File API ,但这似乎还不是一个可靠的标准。

我现在所做的是让用户打开文件,将其内容复制到剪贴板,然后将其粘贴到我网页上的 TextArea 元素中。

在 JavaScript 中,我向 TextArea 的更改事件添加了一个侦听器,并将文本内容解析为 JSON,然后将其写入 indexedDB。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM