Validation functions for JSON Schema validation
This library performs the validations required for some of the JSON Schema format validations as defined in
JSON Schema Validation
Section 7.3.
The functions are provided in the form of a standalone library to simplify their use in code generated from JSON Schema specification files.
Most but not all of the functions defined in the specification are included in the initial version; the remaining few may be added in due course.
The validations are static functions, and they all take a single parameter, the string value to be tested.
They return true if the value matches the requirements of the specification (they all return false if the string is
null).
boolean valid = JSONValidation.isDateTime(str);Test for conformity to the date-time format type.
A string is valid if it conforms to the date-time production in
RFC 3339, section 5.6.
boolean valid = JSONValidation.isLocalDateTime(str);Test for conformity to an unofficial local-date-time type (not part of the JSON Schema Validation Specification).
A string is valid if it conforms to a new production [full-date "T" partial-time] based on
RFC 3339, section 5.6.
boolean valid = JSONValidation.isDate(str);Test for conformity to the date format type.
A string is valid if it conforms to the full-date production in
RFC 3339, section 5.6.
boolean valid = JSONValidation.isTime(str);Test for conformity to the time format type.
A string is valid if it conforms to the full-time production in
RFC 3339, section 5.6.
boolean valid = JSONValidation.isLocalTime(str);Test for conformity to an unofficial local-time type (not part of the JSON Schema Validation Specification).
A string is valid if it conforms to the partial-time production in
RFC 3339, section 5.6.
boolean valid = JSONValidation.isDuration(str);Test for conformity to the duration format type.
A string is valid if it conforms to the duration production in
RFC 3339, Appendix A.
boolean valid = JSONValidation.isURI(str);Test for conformity to the uri format type.
A string is valid if it conforms to RFC 3986.
boolean valid = JSONValidation.isURIReference(str);Test for conformity to the uri-reference format type.
A string is valid if it conforms to RFC 3986 (either a URI or a
relative-reference).
boolean valid = JSONValidation.isURI(str);Test for conformity to the uri-template format type.
A string is valid if it conforms to RFC 6570.
boolean valid = JSONValidation.isUUID(str);Test for conformity to the uuid format type.
A string is valid if it conforms to RFC 4122.
boolean valid = JSONValidation.isHostname(str);Test for conformity to the hostname format type.
A string is valid if it conforms to RFC 1123, section 2.1.
boolean valid = JSONValidation.isEmail(str);Test for conformity to the email format type.
Validation of email addresses is difficult, largely because the specification in
RFC 5322 makes reference to earlier “obsolete” forms of email
addresses that are expected to be accepted as valid.
This function does not attempt to cover the entire range of obsolete addresses; instead, it implements a form of
validation derived from the regular expression at the web site emailregex.com for the
“local-part” (the addressee or mailbox name), and it uses the hostname validation from
RFC 1123 for the “domain”.
boolean valid = JSONValidation.isIPV4(str);Test for conformity to the ipv4 format type.
A string is valid if it conforms to RFC 2673, section 3.2.
boolean valid = JSONValidation.isIPV6(str);Test for conformity to the ipv6 format type.
A string is valid if it conforms to RFC 4291, section 2.2.
NOTE: The JSON Schema Validation specification
says (§ 7.3.4) that a string conforming to the ipv6 format must be an “IPv6 address as defined in
RFC 4291, section 2.2”.
Subsequent to RFC 4291, RFC 5952 recommended tighter restrictions on the
representation of IPV6 addresses, including mandating the use of lower case for all alpha characters, and prohibiting
the use of “::” to compress a single zero 16-bit field.
Because the JSON Schema Validation specification refers only to RFC 4291, not RFC 5952, this function does not implement
the tighter restrictions of the later document.
boolean valid = JSONValidation.isJSONPointer(str);Test for conformity to the json-pointer format type.
A string is valid if it conforms to RFC 6901, section 5.
boolean valid = JSONValidation.isRelativeJSONPointer(str);Test for conformity to the relative-json-pointer format type.
A string is valid if it conforms to
Relative JSON Pointers.
boolean valid = JSONValidation.isRegex(str);Test for conformity to the regex format type.
A string is valid if it conforms to the ECMA 262 regular expression
dialect.
Since the Java Pattern class used here implements a dialect very close to, but not identical to the ECMA 262 variant,
it is possible that in rare cases there may be subtle inconsistencies in the results of this function.
In order to perform date validations, the library contains additional static functions related to dates. They are made public because there is little reason not to do so, and they may be useful in other contexts.
This function returns true if the given year is a leap year.
It takes a single integer parameter, the year to be checked.
The function uses the rules of the Gregorian calendar, and while there is no limit on the input year value, the result
will be meaningful only in cases where the year is subject to that calendar.
boolean leap = JSONValidation.isLeapYear(year);This function returns the length of a specified month.
It takes two integer parameters, the year and the month (in the range 1 to 12).
As with isLeapYear, the function uses the rules of the Gregorian calendar, and the same caveat applies.
int length = JSONValidation.isLeapYear(year, month);Importantly, the library is entirely self-contained, and the inclusion of this library in a project will not bring in a long list of transitive dependencies.
The latest version of the library is 4.0, and it may be obtained from the Maven Central repository.
<dependency>
<groupId>io.jstuff</groupId>
<artifactId>json-validation</artifactId>
<version>4.0</version>
</dependency> implementation 'io.jstuff:json-validation:4.0' implementation("io.jstuff:json-validation:4.0")Peter Wall
2025-02-03