My data is in varchar format. I want to split both the elements of this array so that I can then extract a key value from the json.
Data format:
[
{
You can use a combination of parsing the value as JSON, casting it to a structured SQL type (array/map/row), and UNNEST WITH ORDINALITY to extract the elements from the array as separate rows. Note that this only works if the array elements in the JSON payload don't have a trailing commas. Your example has one but it is removed from the example below.
WITH data(value) AS (VALUES
'[
{
"skuId": "5bc87ae20d298a283c297ca1",
"unitPrice": 0,
"id": "5bc87ae20d298a283c297ca1",
"quantity": "1"
},
{
"skuId": "182784738484wefhdchs4848",
"unitPrice": 50,
"id": "5bc87ae20d298a283c297ca1",
"quantity": "4"
}
]'
),
parsed(entries) AS (
SELECT cast(json_parse(value) AS array(row(skuId varchar)))
FROM data
)
SELECT ordinal, skuId
FROM parsed, UNNEST(entries) WITH ORDINALITY t(skuId, ordinal)
produces:
ordinal | skuId
---------+--------------------------
1 | 5bc87ae20d298a283c297ca1
2 | 182784738484wefhdchs4848
(2 rows)