This approach tackles elements in the array in different order without using UDFs. For more documentation refer to https://docs.snowflake.com/en/sql-reference/functions/filter
with input as (
select parse_json(
'{"custom": [ { "name": "addressIdNum", "valueNum": 12345678}, {"name": "cancelledDateAt", "valueAt": "2024-04-05 01:02:03" }] }')
as json)
select
json:custom as value,
filter(
value,
a -> a:name::string = 'addressIdNum'
)[0]:valueNum::integer as address_id_num,
cast(
filter(
value,
a -> a:name::string = 'cancelledDateAt'
)[0]:valueAt as string)::timestamp as cancelled_date_at
from input;