To find the problematic values, try this query:
select *
from forms.EDI
where isjson(VARIABLES) = 0
The shown JSON seems valid, however the WITH part can be adjusted like in this example:
declare @EDI table (VARIABLES nvarchar(max))
insert @EDI values
(N'{"EmbedContextParameters":null,"PipeData":{"First Name":"Rajkumar","Last Name":"Govindaraj",
"ID":"","FormType":"LeadArtist","ESubDept":"","Programme":"Kusama","ProjectCode":"AX-1234",
"RoleList":"","locale":"en-us"}}')
SELECT * FROM @EDI
CROSS APPLY OPENJSON(VARIABLES)
WITH(
FirstName NVARCHAR(MAX) '$.PipeData."First Name"',
LastName NVARCHAR(MAX) '$.PipeData."Last Name"',
ID INT '$.PipeData.ID',
FormType NVARCHAR(MAX) '$.PipeData.FormType',
ESubDept NVARCHAR(MAX) '$.PipeData.ESubDept',
Programme NVARCHAR(MAX) '$.PipeData.Programme',
ProjectCode NVARCHAR(MAX) '$.PipeData.ProjectCode',
RoleList NVARCHAR(MAX) '$.PipeData.RoleList',
locale NVARCHAR(MAX) '$.PipeData.locale'
) as my_json
It can be also improved.