You are not forced btw to have all attributes/data structures in your target record.
The util.JSON.parse function is smart and only fills the matching members.
So if you aren't interested in some details of the JSON string transmitted you can simply omit them in your target RECORD structure.
The snippet below is working too.
IMPORT util
MAIN
DEFINE s STRING
DEFINE mycatch RECORD
Value DYNAMIC ARRAY OF RECORD
DomainId INT,
DomainName STRING,
Description STRING
--...etc
END RECORD
END RECORD
LET s='{"Value":[{"DomainId":23,"DomainName":"PU","Description":"Public Utilities","WebTitle":"","ImageUrl":"","EditButtonsOn":false,"MapServiceId":1,"MobileMapCacheId":0},{"DomainId":21,"DomainName":"PW","Description":"Public Works","WebTitle":"","ImageUrl":"","EditButtonsOn":false,"MapServiceId":2,"MobileMapCacheId":0}],"Status":0,"Message":null,"ErrorMessages":[],"WarningMessages":[],"SuccessMessages":[]}'
CALL util.JSON.parse(s,mycatch)
DISPLAY mycatch.Value.search("DomainName","PU")
END MAIN
Regards, Leo