Skip to content

pattern validation for propertyNames #326

@kimtkyeom

Description

@kimtkyeom

We are using json-schema-validator for validate given json string is valid.
Recently, we need to validate json fields in object has valid format (using regex)
From draft-v6, json schema specification supports propertyNames.
However json-schema-validator currently not supports patterns, is there any plan to support propertyNames features (Seeing source code, currently only supports minLength and maxLength

Below shows validation with patternProperties using scala repl. I expected validation returns invalid messages but not (refer to web validator)

scala> import com.fasterxml.jackson.databind.node.{ArrayNode, JsonNodeType, ObjectNode}
import com.fasterxml.jackson.databind.node.{ArrayNode, JsonNodeType, ObjectNode}

scala> import com.networknt.schema.{JsonSchemaFactory, SpecVersion, ValidationMessage}
import com.networknt.schema.{JsonSchemaFactory, SpecVersion, ValidationMessage}

scala> import com.fasterxml.jackson.databind.{JsonNode, ObjectMapper}
import com.fasterxml.jackson.databind.{JsonNode, ObjectMapper}

scala> val mapper = new ObjectMapper()
mapper: com.fasterxml.jackson.databind.ObjectMapper = com.fasterxml.jackson.databind.ObjectMapper@42672d9d

scala> val sch = mapper.readTree("""{"type": "object", "propertyNames": {"pattern": "^[A-Za-z-_]*$"}}""")
sch: com.fasterxml.jackson.databind.JsonNode = {"type":"object","propertyNames":{"pattern":"^[A-Za-z-_]*$"}}

scala> val jsonSchemaFactory: JsonSchemaFactory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V7)
jsonSchemaFactory: com.networknt.schema.JsonSchemaFactory = com.networknt.schema.JsonSchemaFactory@270f76dc

scala> val schema = jsonSchemaFactory.getSchema(sch)
schema: com.networknt.schema.JsonSchema = "#" : {"type":"object","propertyNames":{"pattern":"^[A-Za-z-_]*$"}}

# This json node should be failed in validation
scala> schema.validate(mapper.readTree("""{"123": 123}"""))
res6: java.util.Set[com.networknt.schema.ValidationMessage] = []

scala> schema.validate(mapper.readTree("""{"asdf": 123}"""))
res7: java.util.Set[com.networknt.schema.ValidationMessage] = []

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions