- Subscribe to RSS Feed
- Mark Question as New
- Mark Question as Read
- Float this Question for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page
jolttransformjson - transform some elements but keep others
- Labels:
-
Apache NiFi
Created ‎09-02-2016 04:44 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have a complex json and I am using jolttransformjson processor to flatten out the json. I have looked at following links which are very helpful.
But what I still can't find is an example that shows transforming some attributes and not others. So, I have a json and the only thing I want to do really is keep records which contain certain value. Rest will be filtered out. but everything else in the json remains the way it is. Can someone share a quick example of this?
Created ‎09-02-2016 11:27 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, I'm not yet sure if that can be done in JOLT spec. However, how about approaching it from the flow-based programming standpoint? The steps should be:
- Transform with JOLT - do all, no filtering
- EvaluateJsonPath into an attribute - extract values that will be used to make a decision
- RouteOnAttribute - use an expression against the above set of attributes to implement the filtering logic. E.g. discard or re-route records which don't match the criteria.
Created ‎09-02-2016 11:27 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, I'm not yet sure if that can be done in JOLT spec. However, how about approaching it from the flow-based programming standpoint? The steps should be:
- Transform with JOLT - do all, no filtering
- EvaluateJsonPath into an attribute - extract values that will be used to make a decision
- RouteOnAttribute - use an expression against the above set of attributes to implement the filtering logic. E.g. discard or re-route records which don't match the criteria.
Created ‎09-02-2016 04:54 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you @Andrew Grande
Quick question. If I don't need to do any filtering in jolt, why do I need it? To flatten it?
Created ‎09-06-2016 12:42 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
So, I have done step 1 and 2 as you suggested. I am not sure how to implement step 3. Using jolt json, I have flattened my json by moving following objects from array to now as another attribute of the record.
"event_1_detail":{"type":"comma separated values","Description":"<important value>",<many other attributes>}
"event_2_detail":{"type":"comma separated values","Description":"<important value>",<many other attributes>}
"event_3_detail":{"type":"comma separated values","Description":"<important value>",<many other attributes>}
and so on. it's going to be different for each json record.
I have created flow-file attribute using EvalueJson processor which gets the description value. Now out of the elements shown above, I need to drop everything and retain only the one where
"Description":"<the value I want to retain>"
this means of "event_x_detail" above only the one which satisfies my criteria for description should be retained. the rest of json of course still remains there. just rest of "event_x_detail" are dropped. How do i do this using RouteOnAttribute?
Created ‎05-13-2017 02:38 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
In a JOLT spec, if you don't explicitly provide a transformation for a particular field, it will be excluded. So you can include matching rules for the fields you care about (i.e. those that have a certain value), the rest will be discarded. Check the "Filter data from an Array, based on a leaf level value" example at the JOLT Demo online app.
Created ‎01-08-2019 08:29 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
If there anyway I can get both transformed and original json out of JoltTransformation processor?
,
If there anyway I can get both transformed and original json out of JoltTransformation processor?
Created ‎01-09-2019 06:55 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Looks like @Bryan Bende answered your question on SO.
Created on ‎03-31-2020 08:43 AM - edited ‎03-31-2020 08:57 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You can use * and & to copy all in a shift operation
Created on ‎03-31-2020 08:56 AM - edited ‎03-31-2020 08:58 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
For example I want to transform the zabbix payload from v4.0 to v4.4:
Zabbix Json Payload v4.0 (INPUT)
{
"hosts": [
"Host B",
"Zabbix Server"
],
"groups": [
"Group X",
"Group Y",
"Group Z",
"Zabbix servers"
],
"tags": [
{
"tag": "availability",
"value": ""
},
{
"tag": "data center",
"value": "Riga"
}
],
"name": "Either Zabbix agent is unreachable",
"clock": 1519304285,
"ns": 123456789,
"eventid": 42,
"value": 1
}
the JOLT transform:
[
{
"operation": "shift",
"spec": {
"hosts": {
"*": [
"hosts.[&].host",
"hosts.[&].name"
]
},
"*": "&"
}
}
]
The result ( Zabbix v4.4)
{
"hosts" : [ {
"host" : "Host B",
"name" : "Host B"
}, {
"host" : "Zabbix Server",
"name" : "Zabbix Server"
} ],
"groups" : [ "Group X", "Group Y", "Group Z", "Zabbix servers" ],
"tags" : [ {
"tag" : "availability",
"value" : ""
}, {
"tag" : "data center",
"value" : "Riga"
} ],
"name" : "Either Zabbix agent is unreachable",
"clock" : 1519304285,
"ns" : 123456789,
"eventid" : 42,
"value" : 1
}
