columns.jsonString()
When to use
- Your TypeScript code expects a typed object
- Your database stores the object as a JSON encoded string
Do not use when using a native JSON database column and the database driver returns a JavaScript object.
How it works
This column type is generic and takes a generic parameter of the object type stored in the database.
ts
type MyStoredObject = {
animal: string;
canFly: boolean;
};
columns.jsonString<MyStoredObject>();
Nullability
If the column allows null
values, use columns.jsonStringNull()
.
Example
Given the following database table animalExample
:
id INT | attributes TEXT |
---|---|
1 | '{"animal":"capybara","canFly":false}' |
2 | '{"animal":"magpie","canFly":true}' |
And the following model:
ts
type MyStoredObject = {
animal: string;
canFly: boolean;
};
const getExampleRow = db.getOne({
name: "get-one-example-row",
columns: {
attributes: columns.jsonString<MyStoredObject>(),
},
query: ({ id }: { id: number }) =>
SQL`SELECT pet FROM animalExample WHERE id = ${id}`,
});
A query for row id 1
yields:
ts
const result = await getExampleRow({ id: 1 });
if (result) {
console.log(result.attributes);
}
// -> { animal: 'capybara', canFly: false }