Ekstensi SQLite untuk memvalidasi objek JSON dengan Skema JSON. Berdasarkan sqlite-loadable-rs
dan peti jsonschema
.
Jika perusahaan atau organisasi Anda menganggap perpustakaan ini bermanfaat, pertimbangkan untuk mendukung pekerjaan saya!
.load . / jsonschema0
select jsonschema_matches( ' {"maxLength": 5} ' , json_quote( ' alex ' ));
Gunakan dengan batasan CHECK
SQLite untuk memvalidasi kolom JSON sebelum menyisipkannya ke dalam tabel.
create table students (
-- ensure that JSON objects stored in the data column have "firstName" strings,
-- "lastName" strings, and "age" integers that are greater than 0.
data json check (
jsonschema_matches(
json( '
{
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"type": "integer",
"minimum": 0
}
}
}
' ),
data
)
)
);
insert into students(data)
values ( ' {"firstName": "Alex", "lastName": "Garcia", "age": 100} ' );
-- ✓
insert into students(data)
values ( ' {"firstName": "Alex", "lastName": "Garcia", "age": -1} ' );
-- Runtime error: CHECK constraint failed: jsonschema_matches
Temukan semua nilai di kolom yang tidak cocok dengan Skema JSON.
select
rowid,
jsonschema_matches(
' {
"type": "array",
"items": {
"type": "number"
}
} ' ,
foo
) as valid
from bar
where not valid;
Bahasa | Memasang | |
---|---|---|
ular piton | pip install sqlite-jsonschema | |
Kumpulan data | datasette install datasette-sqlite-jsonschema | |
Node.js | npm install sqlite-jsonschema | |
Deno | deno.land/x/sqlite_jsonschema | |
Rubi | gem install sqlite-jsonschema | |
Rilis Github | ||
Karat | cargo add sqlite-jsonschema |
sqlite-jsonschema
didistribusikan di pip, npm, dan https://deno.land/x untuk pemrogram Python, Node.js, dan Deno. Ada juga ekstensi siap pakai yang tersedia untuk digunakan di lingkungan lain.
Untuk pengembang Python, gunakan paket Python sqlite-jsonschema
:
pip install sqlite-jsonschema
Ekstensi sqlite-jsonschema
kemudian dapat dimuat ke objek Koneksi sqlite3
.
import sqlite3
import sqlite_jsonschema
db = sqlite3 . connect ( ':memory:' )
sqlite_jsonschema . load ( db )
db . execute ( 'select jsonschema_version(), jsonschema()' ). fetchone ()
Lihat Menggunakan sqlite-jsonschema
dengan Python untuk detailnya.
Untuk pengembang Node.js, gunakan paket NPM sqlite-jsonschema
:
npm install sqlite-jsonschema
Ekstensi sqlite-jsonschema
kemudian dapat dimuat ke koneksi better-sqlite3
atau node-sqlite3
yang lebih baik.
import Database from "better-sqlite3" ;
import * as sqlite_jsonschema from "sqlite-jsonschema" ;
const db = new Database ( ":memory:" ) ;
db . loadExtension ( sqlite_jsonschema . getLoadablePath ( ) ) ;
const version = db . prepare ( "select jsonschema_version()" ) . pluck ( ) . get ( ) ;
console . log ( version ) ; // "v0.2.0"
Lihat Menggunakan sqlite-jsonschema
dengan Node.js untuk detailnya.
Untuk pengembang Deno, gunakan modul Deno x/sqlite_jsonschema dengan x/sqlite3
.
import { Database } from "https://deno.land/x/[email protected]/mod.ts" ;
import * as sqlite_jsonschema from "https://deno.land/x/sqlite_jsonschema/mod.ts" ;
const db = new Database ( ":memory:" ) ;
db . enableLoadExtension = true ;
db . loadExtension ( sqlite_jsonschema . getLoadablePath ( ) ) ;
const [ version ] = db
. prepare ( "select jsonschema_version()" )
. value < [ string ] > ( ) ! ;
console . log ( version ) ;
Lihat Menggunakan sqlite-jsonschema
dengan Deno untuk detailnya.
Untuk Datasette, gunakan plugin datasette-sqlite-jsonschema
untuk menyertakan fungsi sqlite-jsonschema
ke instance Datasette Anda.
datasette install datasette-sqlite-jsonschema
Lihat Menggunakan sqlite-jsonschema
dengan Kumpulan Data untuk detailnya.
sqlite3
CLI Untuk CLI sqlite3
, unduh ekstensi yang sudah dikompilasi dari halaman Rilis atau buat sendiri. Kemudian gunakan perintah .load
dot.
.load . / jsonschema0
select jsonschema_version();
' v0.2.1 '
Jika Anda menggunakan sqlite-jsonschema
dengan cara yang berbeda dari yang tercantum di atas, unduh ekstensi yang telah dikompilasi sebelumnya dari halaman Rilis dan muat ke dalam lingkungan Anda. Unduh file jsonschema0.dylib
(untuk MacOS), jsonschema0.so
(Linux), atau jsonschema0.dll
(Windows) dari rilis dan muat ke dalam lingkungan SQLite Anda.
Catatan: Angka
0
pada nama file (jsonschema0.dylib
/jsonschema0.so
/jsonschema0.dll
) menunjukkan versi utamasqlite-jsonschema
. Saat inisqlite-jsonschema
masih pra v1, jadi kemungkinan akan ada perubahan besar di versi mendatang.
Kemungkinan ada beberapa metode yang disebut "loadExtension" atau "load_extension" di perpustakaan klien SQLite yang Anda gunakan. Alternatifnya, sebagai upaya terakhir, gunakan fungsi SQL load_extension()
.
Pastikan Anda telah menginstal Rust, make, dan kompiler C. Kemudian git clone
repositori ini dan jalankan make loadable-release
.
git clone https://github.com/asg017/sqlite-jsonschema.git
cd sqlite-jsonschema
make loadable-release
Setelah selesai, ekstensi terkompilasi Anda akan muncul di bawah dist/release/
, baik sebagai jsonschema0.so
, jsonschema0.dylib
, atau jsonschema0.dll
, bergantung pada sistem operasi Anda.
Lihat Referensi API lengkap untuk setiap fungsi SQL sqlite-jsonschema
.
Saya (Alex?) menghabiskan banyak waktu dan tenaga untuk proyek ini dan banyak proyek open source lainnya. Jika perusahaan atau organisasi Anda menggunakan perpustakaan ini (atau Anda merasa bermurah hati), mohon pertimbangkan untuk mendukung pekerjaan saya, atau bagikan proyek ini dengan teman!
sqlite-xsv
, Ekstensi SQLite untuk bekerja dengan CSVsqlite-http
, Ekstensi SQLite untuk membuat permintaan HTTPsqlite-loadable-rs
, Kerangka kerja untuk menulis ekstensi SQLite di Rust