Forum Discussion

Regina's avatar
Regina
New Contributor II
7 years ago

Zip File Read – pass file name to text field

Hello, we have a data coming in a zip file. One of the requirements is to read file name and send it to a text field so it can be loaded in to one of the columns in Oracle table.

For example:

File name is SV_4YEVwN5KjncCtVj.zip

Output result (Oracle table):

Below is a pipeline I have:

ZipFileRead produces following result.

How can I extract “SV_4YEVwN5KjncCtVj” from the "zip-filename": "file:///C:/Users/SVC_SN~1/AppData/Local/Temp/sl_pipe_bdca1c58-dd15-403e-9b86-5b6c38102d1b/SV_4YEVwN5KjncCtVj.zip"
and pass it to a JSON Splitter?

Any suggestions would be greatly appreciated.
Thank you!
Regina

8 Replies

  • Regina's avatar
    Regina
    New Contributor II

    I found solution for this one by replacing JSON Parser with the Binary to Document Snap:

    Encode or Decode property should be set to “Document”

    Thank you for your help!

  • dmiller's avatar
    dmiller
    Former Employee

    zip-filename is the value of the File field within the ZipFile Read, so how is that being populated? Is the value specified there or passed in from the previous Snaps?

    • Regina's avatar
      Regina
      New Contributor II

      The value of the File field passed from the previous Snaps. Here is description of each Snap:








      Thank you!

  • dmiller's avatar
    dmiller
    Former Employee

    It looks like the value of content-location coming out of the Mapper is the file name minus the path.

    If you were to put a Copy after the Mapper, followed by a Mapper to only use content-location (remap to FileName), then join it back at the JSON Splitter.

    • Regina's avatar
      Regina
      New Contributor II

      Thank you, Diane. Unfortunetly, FileName is not coming through after Json Parser and therefore, there is no way to get to it in JSON Splitter.
      ZipFile Read produces following output:

      JSON Parser follows directly after ZipFile Read and outputs only content of the data file itself:

      Therefore, JSON Path does not have FileName:

      Any ideas how I can pass FileName from ZipFile Read to JSON Parser and then to JSON Splitter?
      Thank you!

      • tstack's avatar
        tstack
        Former Employee

        (As you found out, using BinaryToDocument is one approach, I’m just offering another for reference)

        I can offer a solution that is possible if you’re on the new 4.16 release. Since the JSONParser doesn’t pass through the header from the binary document, you can use a child pipeline to do the parsing and pass the filename as a pipeline parameter that can be referenced anywhere in the child pipeline. This approach is possible in 4.16 since the PipelineExecute snap can now support binary views.

        You can switch the type of view by going into the “Views” tab and changing the value under the “Type” column for the given view:

        So, your pipeline will look something like the following with the binary documents from the zip file going into a child pipeline:

        And, the $['content-location'] field containing the file name being passed as a parameter to the child execution in the PipelineExecute:

        The child pipeline would then have the JSONParser and a Mapper to add in the $FileName field:

        I’m attaching the parent and child pipelines as well:

        ParseJsonWithFilename_2019_02_18.slp (4.5 KB)
        ReadZipFileAndParse_2019_02_18.slp (3.7 KB)