SQL:从混乱的 JSON 嵌套字段中提取反斜杠
SQL: Extract from messy JSON nested field with backslashes
我有一个 table,其中一些行具有正常的 JSON,一些行在 JSON 字段(反斜杠)
中具有转义值
id
对象
1
{"is_from_shopping_bag":true,"products":[{"price":{"amount":"18.00","currency":"USD","offset":100," amount_with_offset":"1800"},"product_id":"1234","数量":1}],"来源":"购物车"}
2
{"is_from_shopping_bag":"","产品":"[{\"product_id\":\"2345\",\"价格\":{\"货币\":\"USD\",\"金额\":\"140.00\",\"offset\":100},\"数量\":1}]"}
(注意:我需要在上面 table 中的反斜杠后包含一个 space 以便它们会显示在 github 生成的降价 table - - 我的实际 table 不包括反斜杠和引号字符之间的 spaces)
我正在 Hive 中执行 sql 查询以获取 'currency' 字段。
目前我可以运行
SELECT
id,
JSON_EXTRACT(obj, '$.products[0].price.currency')
FROM my_table
这会给我第一行的正确输出,但在第二行给我一个 NULL
id
对象
1
“美元”
2
空
从第二行获取货币字段的最佳方法是什么?在尝试 JSON_EXTRACT 相关数据之前,有没有办法清理字段并删除反斜杠?
我可以使用 REPLACE 将“\”替换为“”,但这是最有效的方法吗?
使用 regexp_replace
将 \"
替换为 "
,如下所示:
regexp_replace(obj,'\\"','"')
我有一个 table,其中一些行具有正常的 JSON,一些行在 JSON 字段(反斜杠)
中具有转义值id | 对象 | ||
---|---|---|---|
1 | {"is_from_shopping_bag":true,"products":[{"price":{"amount":"18.00","currency":"USD","offset":100," amount_with_offset":"1800"},"product_id":"1234","数量":1}],"来源":"购物车"} | ||
2 | {"is_from_shopping_bag":"","产品":"[{\"product_id\":\"2345\",\"价格\":{\"货币\":\"USD\",\"金额\":\"140.00\",\"offset\":100},\"数量\":1}]"} |
(注意:我需要在上面 table 中的反斜杠后包含一个 space 以便它们会显示在 github 生成的降价 table - - 我的实际 table 不包括反斜杠和引号字符之间的 spaces)
我正在 Hive 中执行 sql 查询以获取 'currency' 字段。
目前我可以运行
SELECT
id,
JSON_EXTRACT(obj, '$.products[0].price.currency')
FROM my_table
这会给我第一行的正确输出,但在第二行给我一个 NULL
id | 对象 |
---|---|
1 | “美元” |
2 | 空 |
从第二行获取货币字段的最佳方法是什么?在尝试 JSON_EXTRACT 相关数据之前,有没有办法清理字段并删除反斜杠? 我可以使用 REPLACE 将“\”替换为“”,但这是最有效的方法吗?
使用 regexp_replace
将 \"
替换为 "
,如下所示:
regexp_replace(obj,'\\"','"')