- Subscribe to RSS Feed
- Mark Question as New
- Mark Question as Read
- Float this Question for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page
How to load attributes from json
- Labels:
-
Apache NiFi
Created 06-04-2018 05:37 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Many ppl has me this question on how to load the attributes from json.
Created 06-04-2018 05:43 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Load the json in to flowfile content . Feed this to a Executescript Processor with the below code.
Note this code assume that the json does not have nested element. Hope this help
import org.apache.commons.io.IOUtils import java.nio.charset.* def flowFile = session.get(); if (flowFile == null) { return; } def slurper = new groovy.json.JsonSlurper() def attrs = [:] as Map<String,String> session.read(flowFile, { inputStream -> def text = IOUtils.toString(inputStream, StandardCharsets.UTF_8) def obj = slurper.parseText(text) obj.each {k,v -> attrs[k] = v.toString() } } as InputStreamCallback) def text = '' // Cast a closure with an outputStream parameter to OutputStreamCallback flowFile = session.write(flowFile, {outputStream -> outputStream.write(text.getBytes(StandardCharsets.UTF_8)) } as OutputStreamCallback) flowFile = session.putAllAttributes(flowFile, attrs) session.transfer(flowFile , REL_SUCCESS)
Created on 06-04-2018 05:47 PM - edited 08-17-2019 08:22 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@tthomas Have you consider EvaluateJsonPath with Destination flowfile attribute? https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.6.0/org.apache...
Here is an example screenshot of how it looks for twitter json feed:
HTH
Created 06-05-2018 01:44 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@tthomas If you found this answer addressed your question, please take a moment to login and click the "accept" link on the answer.
Created 06-04-2018 05:56 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @tthomas
You can use EvaluateJsonPath to extract a JSON field and add it as a flow file attribute : https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.6.0/org.apache...
If your JSON is the following and you want to add a flow file attribute called timestamp
{ “created_at” : “Thu Sep 28 08:08:09 CEST 2017”, “id_store” : 4, “event_type” : “store capacity”, “id_transaction” : “1009331737896598289”, “id_product” : 889, “value_product” : 45 }
you can add an EvaluateJsonPath and add an attribute timestamp with the value $.created_at
Created 06-05-2018 04:54 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Abdelkrim Hadjidj, yes you can do it if you know what you want to extract. This code will help if user want to load the attribute from json file , so that the attribute value is not hardcoded in the flow.xml. Often some values can be kept in variable for specific environment , eg : Dev , Test , Prod. and these can be separated out in a json file which will not change with the updates in the flow.xml
With the latest version of nifi (variable registry ) this is not required. My intention is just to show the need for the same.
