在 SQL 上处理部分字符串化部分键值 JSON VARIANT
Handle partial Stringified Partial Key-value JSON VARIANT on SQL
我有一个如下所示的变体对象:
{
"build_num": "111",
"city_name": "Paris",
"rawData": "\"sku\":\"AAA\",\"price\":19.98,\"currency\":\"USD\",\"quantity\":1,\"size\":\"\"}",
"country": "France"
}
所以你可以看到它的一部分是常规的键值对,比如 build num 和 city name,但是我们有原始数据,它的值是 JSON[=14= 的字符串化版本]
我想从中创建一个变体,如下所示:
{
"build_num": "111",
"city_name": "Paris",
"rawData": {
"sku":"AAA",
"price":19.98,
"currency":"USD",
"quantity":1}
"country": "France"
}
我想在 SQL(雪花)中完成这一切 - 这可能吗?
所以为了将“数据”插入我使用了 CTE,并转义了子 json,所以它如您所描述的那样在数据库中。我还必须添加缺少的对象令牌开头 {
,以使 rawData 有效。
WITH data AS (
SELECT parse_json(json) as json
FROM VALUES
('{"build_num": "111","city_name": "Paris","country": "France","rawData": "{\"sku\":\"AAA\",\"price\":19.98,\"currency\":\"USD\",\"quantity\":1,\"size\":\"\"}"}')
v( json)
)
SELECT
json,
json:rawData as raw_data,
parse_json(raw_data) as sub_json,
OBJECT_INSERT(json, 'rawData', sub_json, true) as all_json
FROM data;
所以这展示了逐步转换数据,通过 PARSE_JSON, and re inject via OBJECT_INSERT 将结果解析为原始对象。
WITH data AS (
SELECT parse_json(json) as json
FROM VALUES
('{"build_num": "111","city_name": "Paris","country": "France","rawData": "{\"sku\":\"AAA\",\"price\":19.98,\"currency\":\"USD\",\"quantity\":1,\"size\":\"\"}"}')
v( json)
)
SELECT
OBJECT_INSERT(json, 'rawData', parse_json(json:rawData), true) as all_json
FROM data;
TRY_PARSE_JSON 将从 JSON 元素中清除额外的斜线,下面是参考:
select
column1 as n,
try_parse_json(column1) as v
from
values
(
'{
"build_num": "111",
"city_name": "Paris",
"rawData": "{\"sku\":\"AAA\",\"price\":19.98,\"currency\":\"USD\",\"quantity\":1,\"size\":\"\"}",
"country": "France"}'
) as vals;
我有一个如下所示的变体对象:
{
"build_num": "111",
"city_name": "Paris",
"rawData": "\"sku\":\"AAA\",\"price\":19.98,\"currency\":\"USD\",\"quantity\":1,\"size\":\"\"}",
"country": "France"
}
所以你可以看到它的一部分是常规的键值对,比如 build num 和 city name,但是我们有原始数据,它的值是 JSON[=14= 的字符串化版本]
我想从中创建一个变体,如下所示:
{
"build_num": "111",
"city_name": "Paris",
"rawData": {
"sku":"AAA",
"price":19.98,
"currency":"USD",
"quantity":1}
"country": "France"
}
我想在 SQL(雪花)中完成这一切 - 这可能吗?
所以为了将“数据”插入我使用了 CTE,并转义了子 json,所以它如您所描述的那样在数据库中。我还必须添加缺少的对象令牌开头 {
,以使 rawData 有效。
WITH data AS (
SELECT parse_json(json) as json
FROM VALUES
('{"build_num": "111","city_name": "Paris","country": "France","rawData": "{\"sku\":\"AAA\",\"price\":19.98,\"currency\":\"USD\",\"quantity\":1,\"size\":\"\"}"}')
v( json)
)
SELECT
json,
json:rawData as raw_data,
parse_json(raw_data) as sub_json,
OBJECT_INSERT(json, 'rawData', sub_json, true) as all_json
FROM data;
所以这展示了逐步转换数据,通过 PARSE_JSON, and re inject via OBJECT_INSERT 将结果解析为原始对象。
WITH data AS (
SELECT parse_json(json) as json
FROM VALUES
('{"build_num": "111","city_name": "Paris","country": "France","rawData": "{\"sku\":\"AAA\",\"price\":19.98,\"currency\":\"USD\",\"quantity\":1,\"size\":\"\"}"}')
v( json)
)
SELECT
OBJECT_INSERT(json, 'rawData', parse_json(json:rawData), true) as all_json
FROM data;
TRY_PARSE_JSON 将从 JSON 元素中清除额外的斜线,下面是参考:
select
column1 as n,
try_parse_json(column1) as v
from
values
(
'{
"build_num": "111",
"city_name": "Paris",
"rawData": "{\"sku\":\"AAA\",\"price\":19.98,\"currency\":\"USD\",\"quantity\":1,\"size\":\"\"}",
"country": "France"}'
) as vals;