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)
})
I may have found a bug - I had a few object stores that were empty. When importing, because there were no records,
delete importObject[storeName]
was never run. I fixed it by adding a check before the for loop: