Re: JSON Schema
Thanks Matt for the code and also for opening issue on this. On Tue, May 17, 2016 at 1:59 PM, Matt Burgess <mattyb...@gmail.com> wrote: > 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.th...@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"} > > } >
Re: JSON Schema
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.th...@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"} > }
JSON Schema
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"} }