How to get only one of two items returned

In a mapper snap, my current expression is:
['env:Envelope']['env:Body']['ns0:uploadFileToUcmResponse'].result['']

I only want the second value “123109” returned as a string. How can I do this? Thanks!

@swright array[1] , it will give you 2nd value. for your case it looks like-

[‘env:Envelope’][‘env:Body’][‘ns0:uploadFileToUcmResponse’].result[’$’][1]
or
[‘env:Envelope’][‘env:Body’][‘ns0:uploadFileToUcmResponse’].result[1]

I had tried these before and I think that they should have worked but they didn’t.

The first one changed the values to 1 and 2 which isn’t what I want:

['env:Envelope']['env:Body']['ns0:uploadFileToUcmResponse'].result[''][1]

The second one failed with:

reason":

“‘1’ was not found while evaluating the sub-expression ‘$[‘env:Envelope’][‘env:Body’][‘ns0:uploadFileToUcmResponse’].result[1]’”

I also tried the following that failed:

['env:Envelope']['env:Body']['ns0:uploadFileToUcmResponse'].result[''].pop()

It failed with:

"String type does not have a method named: pop, found in: …sult[’$’].pop().

Thanks,

Scott

@swright Is that possible to share sample json here?

I attached a copy of the json.

I am currently using a fix for the issue in which I use a filter snap after the mapper. It works, but I think that I should be able to select from the values in the mapper and not have to use the filter. Although it looked to me like an array, it seems to be a string which is why many of the things I tried didn’t work.

image001.png

Thanks,

Scott

(Attachment Copy_output0.json is missing)

Sorry. My attachment didn’t get through due to a .json extension. I’m sending it now after change the extension to .txt.

image001.png

Copy_output0.txt (3.56 KB)

You are dealing with 2 separate input documents. The Mapper gets these one-by-one, not both of them at once.

Assuming the Mapper’s input is coming from a Json Parser, you can deal with this by unchecking “Process array” in the Json Parser settings. Then the Mapper will receive a single document whose root is an array. Then your expression would look like this:

jsonPath($, "$[*]['env:Envelope']['env:Body']['ns0:uploadFileToUcmResponse'].result['$']")[1]

Another approach is to filter the Mapper’s input so that you’re only getting the second document. To do that, insert a Head snap with an offset of 1.

1 Like

@swright Try attached pipeline. If you are absolutely sure proper values comes on element 0/1 position then use[0/1] it else can filter over -1 criteria. I have added both in mapper.
community_Array_2020_10_29.slp (6.7 KB)

1 Like

One more way of doing is use a Group By Snap and use the below Expression.

jsonPath($, “group[?(value['env:Envelope']['env:Body']['ns0:uploadFileToUcmResponse'].result['’]==125044)]”)

sample_2020_10_29.slp (8.9 KB)

These looked like great solutions, but although they work perfectly in your sample pipeline, I can’t get them to work in mine. Mine are the output of a SOAP Execute Snap. This is one of the errors I am getting:

Thanks,
Scott

It’s because there is no value comes for results field from soap request. Just check the null safe option in mapper and save then value will come as null , no more exceptions will get.

Thanks,
Supratim
(+91)923-263-3466

This e-mail and any files transmitted with it are for the sole use of the intended recipient(s) and may contain confidential and privileged information. If you are not the intended recipient(s), please reply to the sender and destroy all copies of the original message. Any unauthorized review, use, disclosure, dissemination, forwarding, printing or copying of this email, and/or any action taken in reliance on the contents of this e-mail is strictly prohibited and may be unlawful. Where permitted by applicable law, this e-mail and other e-mail communications sent to and from Cognizant e-mail addresses may be monitored.