Thanks for your inputs. I tried your JSON as below (Note I put 1095 days as it equates to 3 years).
TRIAL 1 : (YOUR SUGGESTION) :
--------------------------------------------
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"txtContent": "=if([$_ComplianceTag] == 'test-3yrs', addDays(Date(toLocaleString([$_ComplianceTagWrittenTime])), 1095), '')"
}
But when I try with your logic, it says "invalid date" in the Elapsed date column

TRIAL 2 (ANOTHER SUGGESTION I TRIED) :
---------------------------------------------------------
I tried another JSON format below.
The below JSON worked, and the "Retention Elapse date" is showing 3 years from now. But the issue with below formula, is that it calculates 3 years from "Now", irrespective of when "Retention label" column was populated. Can you help me format below logic to work based on when the retention label was populated and not from "now"
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"txtContent": "=if([$_ComplianceTag] == 'test-3yrs', @now + 365*3*24*60*60*1000, '')"
}

Also I need to add another conditon - if the label is "Indefinite", then populate 10 years from now.. I tried to modify the trial 2 code with this one below, but it gives an error. Please advice whats wrong with the below syntax as well.
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
"elmType": "div",
"style": {
"white-space": "nowrap"
},
"children": [
{
"elmType": "span",
"txtContent": "=if($_ComplianceTag == 'test-3yrs', @now + 365*3*24*60*60*1000, if($_ComplianceTag == 'Indefinite', @now + 365*10*24*60*60*1000, ''))",
"style": {
"font-weight": "bold",
"color": "#000000"
}
}
]
}
}