nifi-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Burgess <mattyb...@gmail.com>
Subject Re: JSON Schema
Date Tue, 17 May 2016 17:59:09 GMT
Madhu,

This is a good idea for a processor (ValidateJson like the existing
ValidateXml processor), I've written up [1] in Jira for it.

In the meantime, here's a Groovy script you could use in
ExecuteScript, just need to download the two JAR dependencies ([2] and
[3]) and add them to your Module Directory property.

import org.everit.json.schema.Schema
import org.everit.json.schema.loader.SchemaLoader
import org.json.JSONObject
import org.json.JSONTokener

flowFile = session.get()
if(!flowFile) return

jsonSchema = """
{
  "type": "object",
  "required": ["name", "tags", "timestamp", "fields"],
  "properties": {
    "name": {"type": "string"},
    "timestamp": {"type": "integer"},
    "tags": {"type": "object", "items": {"type": "string"}},
    "fields": { "type": "object"}
  }
}
"""

boolean valid = true
session.read(flowFile, { inputStream ->
   jsonInput = org.apache.commons.io.IOUtils.toString(inputStream,
java.nio.charset.StandardCharsets.UTF_8)
   JSONObject rawSchema = new JSONObject(new JSONTokener(new
ByteArrayInputStream(jsonSchema.bytes)))
   Schema schema = SchemaLoader.load(rawSchema)
   try {
      schema.validate(new JSONObject(jsonInput))
    } catch(ve) {
      log.error("Doesn't adhere to schema", ve)
      valid = false
    }
  } as InputStreamCallback)

session.transfer(flowFile, valid ? REL_SUCCESS : REL_FAILURE)


Hope this helps!

Regards,
Matt

[1] https://issues.apache.org/jira/browse/NIFI-1893
[2] http://mvnrepository.com/artifact/org.everit.json/org.everit.json.schema/1.3.0
[3] http://mvnrepository.com/artifact/org.json/json/20160212


On Tue, May 17, 2016 at 11:44 AM, Madhukar Thota
<madhukar.thota@gmail.com> wrote:
> is it possible to do validation of incoming json via http Processor with
> Json Schema in nifi?
>
> Example Json:
>
> {
>   name: "Test",
>   timestamp: 1463499695,
>   tags: {
>        "host": "Test_1",
>        "ip" : "1.1.1.1"
>   },
>   fields: {
>     "cpu": 10.2,
>     "load: : 15.6
>   }
> }
>
> JSON schema:
>
> "type": "object",
> "required": ["name", "tags", "timestamp", "fields"],
> "properties": {
>     "name": {"type": "string"},
>     "timestamp": {"type": "integer"},
>     "tags": {"type": "object", "items": {"type": "string"}},
>     "fields": { "type": "object"}
> }

Mime
View raw message