Forum Discussion

viji28's avatar
viji28
New Contributor
4 years ago
Solved

Retrieve the key value by passing another key value in json

My Json looks like this πŸ™‚
{ β€œmain” :[
{
β€œCM”: β€œT”,
β€œTM”: β€œβ€
},
{
β€œCM”: β€œ100000”,
β€œTM”: β€œ9999”
},
{
β€œCM”: β€œ200000”,
β€œTM”: β€œβ€
} ]
}
This is stored in an test.expr file.

I have the CM values coming from the previous snap. What i would like to achieve is - I would like to pass 100000 to CM and retrieve 9999 as result.

How can I achieve this ?

  • @viji28,

    If you have the liberty to restructure your test.expr expression library file, I would recommend moving to the match control operator syntax for reduced code and simpler reference. For the test.expr file, you could change it to:

    {
        "main": cm => match cm {
           "T" => "",
           "100000" => "9999",
           "200000" => "",
           _ => ""
        }
    }
    

    After, you can use a simpler reference:

    lib.test.main($CM)
    

    However, if you can’t make a major change to the structure for some reason, but can adapt it to an arrow function, you can incorporate bojanvelevski’s suggestion in the expression library and still use the simpler lib.test.main($CM) reference. The file might look something like this:

    { 
    	"main": (cm =>
    		[
    			{
    				"CM": "T",
    				"TM": ""
    			},
    			{
    				"CM": "100000",
    				"TM": "9999"
    			},
    			{
    				"CM": "200000",
    				"TM": ""
    			}
    		].filter(x=> x.CM==cm)[0].TM)
    }
    

    There are other restructuring options, as well.

4 Replies

  • Linus's avatar
    Linus
    Former Employee

    Does the HTTP Router Snap help you? With such a Snap, you can expose your Pipeline as a Triggered Task, and route to a specific operation (e.g SQL Read, SQL Delete) based on the routing on the HTTP verb. Just make sure you use a Union Pipeline to group all unbound output views into a single one