As answered for JSON_QUERY in this question the same is true for JSON_VALUE as well.
Docs on JSON_VALUE
In SQL Server 2017 (14.x) and in Azure SQL Database, you can provide a
variable as the value of path.
Before SQL Server 2017 you would have to build the query dynamically.
Examples
Printing the query on sql server 2016
declare @id int;
set @id = 1754;
DECLARE @SQL VARCHAR(MAX);
SET @SQL ='
select
(JSON_VALUE(cast(ad.data_map as varchar(max)),''$.dataMap."1754".value'')) CorrespondanceNumber,
(JSON_VALUE(cast(ad.data_map as varchar(max)),''$.dataMap.***"'+cast(@id as varchar(4))+'"***.value'')) Agency,
(JSON_VALUE(cast(ad.data_map as varchar(max)),''$.dataMap."1754".value'')) Protocal
from actions_new a
left join action_data ad on ad.id_ref = a.id
where baid = 32 and displayrequestid < 100;';
PRINT (@SQL);
Executing the query on sql server 2016
declare @id int;
set @id = 1754;
DECLARE @SQL NVARCHAR(MAX);
DECLARE @Parameterdefinition nvarchar(20) ='@id int';
SET @SQL ='
select
(JSON_VALUE(cast(ad.data_map as varchar(max)),''$.dataMap."1754".value'')) CorrespondanceNumber,
(JSON_VALUE(cast(ad.data_map as varchar(max)),''$.dataMap.***"+cast(@id as varchar(4))"***.value'')) Agency,
(JSON_VALUE(cast(ad.data_map as varchar(max)),''$.dataMap."1754".value'')) Protocal
from actions_new a
left join action_data ad on ad.id_ref = a.id
where baid = 32 and displayrequestid < 100;';
EXEC SP_EXECUTESQL
@SQL,@Parameterdefinition,@id;
DB<>Fiddle