This gist provides functions to import and export data from an IndexedDB database as JSON. It's based on Justin Emery's indexeddb-export-import
package, but applies some adjustments that reflect better on the current browser landscape (i.e. better developer ergonomics but no support for Internet Explorer).
For each of the provided functionalities, you need a connected IDBDatabase
instance.
import { idb } from 'some-database'
import { exportToJson } from 'idb-backup-and-restore.js'
exportToJson(idb)
.then(result => {
console.log('Exported JSON string:', result)
})
.catch(error => {
console.error('Something went wrong during export:', error)
})
import { idb } from 'some-database'
import { serializedData } from 'some-serialized-data'
import { importFromJson } from 'idb-backup-and-restore.js'
importFromJson(idb, serializedData)
.then(() => {
console.log('Successfully imported data')
})
.catch(error => {
console.error('Something went wrong during import:', error)
})
Depending on your use case, it can be reasonable to clear a database before importing serialized data:
import { idb } from 'some-database'
import { serializedData } from 'some-serialized-data'
import { importFromJson, clearDatabase } from 'idb-backup-and-restore.js'
clearDatabase(idb)
.then(() => importFromJson(idb, serializedData))
.then(() => {
console.log('Successfully cleared database and imported data')
})
.catch(error => {
console.error('Could not clear & import database:', error)
})
Thanks so much @loilo! In case anyone is wondering, the callback function that handles the cursor can also extract the key corresponding to each object in the store, if you want that information (as I did). The modification in
exportToJson
simply becomes:and the corresponding modification in
importFromJson
within the loop:Hope that helps someone and thanks again! Web tech is so dope , more info on cursors here