writeOnly : Boolean
writeOnly
BooleanThis keyword indicates that the value is never present when the instance is retrieved from the owning authority.
Value |
This keyword must be set to a boolean value
Hint: Use the jsonschema metaschema and jsonschema lint commands to catch keywords set to invalid values
|
---|---|
Kind | Annotation |
Applies To | Any |
Base Dialect | 2020-12 |
Changed In | None |
Introduced In | Draft 7 |
Vocabulary | Meta Data |
Specification | https://json-schema.org/draft/2020-12/json-schema-validation.html#section-9.4 |
Metaschema | https://json-schema.org/draft/2020-12/meta/meta-data |
Official Tests | None |
Default |
false
|
Annotation |
Boolean
The boolean value set by this keyword
Hint: Use the jsonschema validate command to collect annotations from the command-line
|
Affected By | None |
Affects | None |
Also See |
The writeOnly
keyword, when set to true
, signifies that an instance value
(such as a specific object property) can be modified or removed but not read,
whatever that means in the context of the system. For example, form generators
may rely on this keyword to mark the corresponding input as as a password
field. This keyword does not affect validation, but the evaluator will collect
its value as an annotation.
Best Practice
Avoid setting this keyword to the default value false
. If an instance value
is not considered to be write only, the best practice is to omit the use of
this keyword altogether. This prevents unnecessarily generating and collecting
an annotation that does not carry any additional meaning.
Also avoid simultaneously setting this keyword and the readOnly
keyword to true
for the same instance
location, resulting in ambiguous semantics.
Common Pitfall
Tooling makers must be careful when statically traversing schemas in search of occurences of this keyword. It is possible for schemas to make use of this keyword behind conditional operators, references, or any other type of keyword that makes it hard or even impossible to correctly locate these values without fully evaluating the schema against an instance. The only bullet proof method is through annotation collection.
For example, an instance property might only be write only under certain
conditions determined by a dynamic operator like anyOf
.
Examples
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"username": { "type": "string" }
"password": { "type": "string", "writeOnly": true },
}
}
{ "username": "jviotti", "password": "mysupersecretpassword" }
{ "keyword": "/properties/password/writeOnly", "instance": "/password", "value": true }
{ "username": "jviotti" }
{ "password": null }
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"username": { "type": "string" }
"password": { "type": "string" },
}
"dependentSchemas": {
"username": {
"properties": { "password": { "writeOnly": true } }
}
}
}
{ "username": "jviotti", "password": "mysupersecretpassword" }
{ "keyword": "/dependentSchemas/username/properties/password/writeOnly", "instance": "/password", "value": true }
{ "username": "jviotti" }
{ "password": "mysupersecretpassword" }
{ "password": null }