Our Community is getting an upgrade! To get everything ready for the relaunch, we’ll be placing the site in read-only mode starting September 21st.
We really appreciate your understanding while we get things set up behind the scenes. Catch up on all the exciting details about the move here.
Need help or have questions? Drop us a line at [email protected]
Created 10-13-2016 02:04 AM
Is there any Nifi processor to route mulitple json arrays(by splitting json array based on field/attribute condition) to multiple processor based on json field condition .
ex : assume [{a:1},{a:1},{a:2},{a:2}] is jsonarray , there is a requiremnt to route a=1 contained json files are send to another processor as array . and a=2 json array to another processor
Created on 10-13-2016 02:38 AM - edited 08-19-2019 02:48 AM
Hello,
I hope I understand your question properly.
If you want to split the example JSON into two flow-files, each contains an array of elements with a=1, or a=2, then following flow can do the job. The point is passing the same JSON flow-file into two EvaluateJsonPath processors, then each EvaluateJsonPath extract array based on its own interest, using JSON path like '$.[?(@.a=='2')]'.
I've tested with an input JSON:
[{"a":1, "i": 1},{"a":1, "i": 2},{"a":2, "i": 3},{"a":2, "i": 4}]
Then, I got on left side:
[{"a":1,"i":1},{"a":1,"i":2}]
on right side:
[{"a":2,"i":3},{"a":2,"i":4}]
Hope this helps.
Created on 10-13-2016 02:38 AM - edited 08-19-2019 02:48 AM
Hello,
I hope I understand your question properly.
If you want to split the example JSON into two flow-files, each contains an array of elements with a=1, or a=2, then following flow can do the job. The point is passing the same JSON flow-file into two EvaluateJsonPath processors, then each EvaluateJsonPath extract array based on its own interest, using JSON path like '$.[?(@.a=='2')]'.
I've tested with an input JSON:
[{"a":1, "i": 1},{"a":1, "i": 2},{"a":2, "i": 3},{"a":2, "i": 4}]
Then, I got on left side:
[{"a":1,"i":1},{"a":1,"i":2}]
on right side:
[{"a":2,"i":3},{"a":2,"i":4}]
Hope this helps.
Created 10-13-2016 02:41 AM
Another solution would be:
SplitJson -> EvaluateJsonPath (store a on attribute) -> RouteOnAttribute -> MergeContent
But if the desired output is JSON array, using EvaluateJsonPath is simpler.
Created 10-14-2016 07:57 PM
thank you . is it possible add 2 condition for content like a=='1 ' or a=='2' (or) a=='1' and i=='ss' . Thanks in advance
Created 10-15-2016 12:04 AM
what is this expression languauge : $.[?(@.a...] , is it jave regex ? how can we use 2 values filter OR or AND for content filed ?? like a==1 or a==2 .
Created 10-17-2016 08:53 AM
Hello, sorry for the delay. The language is JSONPath. JSONPath itself has filtering capabilities. Many examples can be found on this page. https://github.com/jayway/JsonPath
Created 04-24-2020 07:45 AM
I have some sort of the same scenario. But I have to route out on department value, like department="IT" route to some other flow and for department="DB" route to another flow.
For that, I have written out expression as $.[?(@.department=="DB")]. But this doesn't work. Please suggest for the above scenario.
And also if we have to apply some conditions like route data for a>10 like that.
Created 06-19-2017 04:27 PM
how to append values for empty flowfile attributes for JSON format data. i.e suppose i have 40 columns with JSON data consuming from kafka queue and i have values for 25 fields only and remaining 15 fields, i don't have values .So i put the json into EvaluateJsonPath processor and converted into flowfile attributes ..From some other processor i am getting values for those empty attributes so i need to append/fill the empty attributes with the values with orginal json file.
Can you please suggest how to use it?
thanks