cancel
Showing results for 
Search instead for 
Did you mean: 

Null Safe access option for object value reference in JSON Generator snap?

Charles
New Contributor II

Hi,

I’m trying to reference a value from the input object in the JSON Generator snap. The property is optional in the upstream snaps. If I straight reference it, I’ll get an “Invalid JSON-Path field not found” error.

Is there a similar way to the use “null-safe access” option like in the mapper snap in the JSON Generator snap?
Is there a way to use the $.get() method in the JSON Generator snap? I keep getting syntax errors.

Below is my property reference:
$['wd:Project_Data']['wd:End_Date']

This fails:

$['wd:Project_Data'].get("wd:End_Date")
$['wd:Project_Data'].get(['wd:End_Date'])
$.get(['wd:Project_Data']['wd:End_Date'])
1 ACCEPTED SOLUTION

del
Contributor III

@Charles,
Like Patrick, I was also thinking Velocity (VTL) as a solution, but as I tried to solution your original post, the Workday namespace convention in the property names adds some complexity. I don’t know if Velocity beats the null-safe mapper for your particular use case, but it can be good info for your tool belt in the future.

The kind of ugly solution I came up with (in a one-liner) is:

[
    {
       "output" : #set ($pd = $['wd:Project_Data']) #set ($ed = $pd['wd:End_Date']) #if (${ed}) ${ed} #else null #end
    }
]

I’m not well versed in VTL, so there’s likely something a little cleaner than the above.

View solution in original post

10 REPLIES 10

bojanvelevski
Valued Contributor

Your first expression seems ok, but can it happen that the first object is also optional? If that’s so, you should use the .get() method at both levels:

$.get('wd:Project_Data').get('wd:End_Date')

Note that the .get() method allows for a default value:

$.get('wd:Project_Data','DEFAULT VALUE')

Thanks for the reply @bojanvelevski.

I think the issue may be that expressions are not allowed in the JSON Generator snap? The solution to my problem is easy enough, I’ll just put a mapper snap before my JSON Generator snap and use the “null-safe access” option to fill in the blanks where needed, but I am surprised this isn’t an option in the JSON Generator snap, and I’m also not sure if any expressions are allowed.

See the very basic chain-JSON Generator pipeline that demonstrates the problem. I can’t reference the input object with an $.get(“num”) expression.

image

JSON Generator Expression Test_2021_12_06.slp (4.7 KB)

Didn’t noticed that we are talking about JSON Generator snap. @viktor_n 's suggestion should work.

I’ve tried the same as I showed you in response above, only thing that I’ve changed was that I was using fields that you provided in the post and I couldn’t work them out anyhow.

I’ve also tried with apache velocity but nothing.

Problem are those “:” you have in the name. I don’t know why but you can not map fields in JSON Generator with square brackets.

Solution could be as you said to map the first in mapper and pass it to JSON Generator with null-safe-access, or with expression to remove those “:” from the name of the field.