Archives of Support Questions (Read Only)

This is an archived board for historical reference. Information and links may no longer be available or relevant
Announcements
This board is archived and read-only for historical reference. To ask a new question, please post a new topic on the appropriate active board.

How can I adjust my JOLT transformation to force an output property to be a string

avatar
Rising Star

The following code is the current JOLT transformation that I am using in a NIFI JoltTransformJSON processor:

[
  {
    "operation": "shift",
    "spec": {
      "textNOTAM": {
        "NOTAM": {
          // simple match.  Put the value '4' in the output under the "Rating" field
          "id": "&0",
          "number": "&0",
          "year": "&0",
          "type": "&0",
          "issued": "&0",
          "affectedFIR": "&0",
          "minimumFL": "&0",
          "maximumFL": "&0",
          "radius": "&0",
          "location": "&0",
          "effectiveStart": "&0",
          "effectiveEnd": "&0",
          "schedule": "&0",
          "text": "&0"
        }
      }
    }
}]

A typical flow file coming out of my JOLT transformation looks like this:

{"id":"NOTAM_1_51227850","number":376,"year":2018,"type":"N","issued":"2018-10-30T12:29:00.000Z","affectedFIR":"LIMM","minimumFL":"000","maximumFL":999,"radius":5,"location":"LIPA","effectiveStart":201810301229,"effectiveEnd":201811032359,"text":"NON-STANDARD BARRIER CONFIGURATION. BARRIER 2 (BAK-12) UNSERVICEABLE"}

The problem I am having is with the effectiveStart and effectiveEnd fields. I need the value to be a string, not a number. How can I adjust the JOLT transformation above to ensure that it is a string?

The JSON that comes out of this processor, I then inject into MONGO using a PutMongo processor.

Because of this input format problem, with effectiveStart and effectiveEnd, they are coming out of mongo as follows:

{ "_id" : ObjectId("5bc8b2808aad6206ababaa4b"), "id" : "NOTAM_1_51105982", "number" : 7, "year" : 2018, "type" : "N", "issued" : "2018-10-16T00:13:00.000Z", "affectedFIR" : "ZBW", "minimumFL" : "000", "maximumFL" : 999, "radius" : 5, "location" : "OXC", "effectiveStart" : NumberLong("201810160013"), "effectiveEnd" : "201810312359EST", "text" : "SVC AUTOMATED WX BCST SYSTEM PRECIPITATION OUT OF SERVICE" }

Notice that the effectiveStart is a NumberLong. How can I adjust the JOLT transform to ensure that the effectiveStart and effectiveEnd are seen as strings when the JSON flow file is sent to PutMongo?

1 ACCEPTED SOLUTION

avatar
Master Guru

Try the following chain spec (it uses Modify-overwrite instead of Shift):

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "effectiveStart": "=toString",
      "effectiveEnd": "=toString"
    }
  }
]

That will preserve all other fields, but change the values of effectiveStart/End to strings

View solution in original post

3 REPLIES 3

avatar
Master Guru

Do you need the numbers as-is into strings, or a formatted timestamp string, or something else?

avatar
Master Guru

Try the following chain spec (it uses Modify-overwrite instead of Shift):

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "effectiveStart": "=toString",
      "effectiveEnd": "=toString"
    }
  }
]

That will preserve all other fields, but change the values of effectiveStart/End to strings

avatar
Rising Star

Thank you @Matt Burgess for the key operation that i was missing. Keep in mind, I still need the shift operation since I am reducing a more complex JSON as part of the shift

So the entire spec contains two operations as follows..

[
  {
    "operation": "shift",
    "spec": {
      "textNOTAM": {
        "NOTAM": {
          
          "id": "&0",
          "number": "&0",
          "year": "&0",
          "type": "&0",
          "issued": "&0",
          "affectedFIR": "&0",
          "minimumFL": "&0",
          "maximumFL": "&0",
          "radius": "&0",
          "location": "&0",
          "effectiveStart": "&0",
          "effectiveEnd": "&0",
          "schedule": "&0",
          "text": "&0"
        }
      }
    }
},
{
    "operation": "modify-overwrite-beta",
    "spec": {
      "effectiveStart": "=toString",
      "effectiveEnd": "=toString"
    }
  }
]