Verifies if the return value of JSON.parse
conforms to a type constraint.
Supports simple and complex type constraints.
Useful for validation of unreliable JSON.
npm install xtao-org/verifyjson.js#semver:0.1.0
Import from jsDelivr:
import {verifyJson} from 'https://cdn.jsdelivr.net/gh/xtao-org/verifyjson.js@v0.1.0/mod.js'
For example:
import {verifyJson} from 'https://cdn.jsdelivr.net/gh/xtao-org/verifyjson.js@v0.1.0/mod.js'
verifyJson(JSON.parse(`42`), ["exactly", 42]) === true
verifyJson(JSON.parse(`42`), ["number"]) === true
verifyJson(JSON.parse(`42`), ["any"]) === true
verifyJson(JSON.parse(`42`), ["string"]) === false
verifyJson(JSON.parse(`42`), ["boolean"]) === false
verifyJson(JSON.parse(`42`), ["null"]) === false
verifyJson(JSON.parse(`{"one": 1, "two": 2, "three": 3, "four": 42}`), [
"object", {
"one": ["number"],
"two": ["number"],
"three": ["union", [["number"], ["string"]]],
"four": ["exactly", 42]
}
]) === true
any
matches any valid JSON value.
verifyJson(JSON.parse(`{"whatever": "works"}`), ["any"]) === true
exactly
matches an exact JSON value.
verifyJson(JSON.parse(`"42"`), ["exactly", "42"]) === true
verifyJson(JSON.parse(`"42"`), ["exactly", 42]) === false
number
matches any JSON number.
verifyJson(JSON.parse(`"42"`), ["number"]) === false
verifyJson(JSON.parse(`42`), ["number"]) === true
string
matches any JSON string.
verifyJson(JSON.parse(`"42"`), ["string"]) === true
verifyJson(JSON.parse(`42`), ["string"]) === false
boolean
matches true
and false
.
verifyJson(JSON.parse(`true`), ["boolean"]) === true
verifyJson(JSON.parse(`false`), ["boolean"]) === true
verifyJson(JSON.parse(`42`), ["boolean"]) === false
null
matches only null
.
verifyJson(JSON.parse(`null`), ["null"]) === true
verifyJson(JSON.parse(`false`), ["null"]) === false
array
matches an array of given type.
verifyJson(JSON.parse(`[1, 2, 3, 42]`), ["array", ["number"]]) === true
verifyJson(JSON.parse(`[1, 2, 3, "42"]`), ["array", ["number"]]) === false
tuple
matches an array which contains a number of values of specified types.
verifyJson(JSON.parse(`[1, 2, 3, 42]`), ["tuple", [["number"], ["number"], ["number"], ["number"]]]) === true
verifyJson(JSON.parse(`[1, 2, 3, "42"]`), ["tuple", [["number"], ["number"], ["number"], ["string"]]]) === true
verifyJson(JSON.parse(`[1, 2, 3, "42"]`), ["tuple", [["number"], ["number"], ["number"], ["number"]]]) === false
verifyJson(JSON.parse(`[1, 2, 3, 42]`), ["tuple", [["number"], ["number"], ["number"]]]) === false
verifyJson(JSON.parse(`[1, 2, 3, 42]`), ["tuple", [["number"], ["number"], ["number"], ["string"]]]) === false
object
matches an object which contains only the properties with values of specified types.
verifyJson(JSON.parse(`{"one": 1, "two": 2, "three": 3, "four": 42}`), ["object", {"one": ["number"], "two": ["number"], "three": ["number"], "four": ["exactly", 42]}]) === true
union
matches a value of any of the specified types.
verifyJson(JSON.parse(`42`), ["union", [["number"], ["string"]]]) === true
verifyJson(JSON.parse(`"42"`), ["union", [["number"], ["string"]]]) === true
© 2022 xtao.org