如何从 SQL Redshift 中的嵌套 json 中删除所有 \?

How to remove all \ from nested json in SQL Redshift?

我在从列中的嵌套 json 值中提取值时遇到了一些问题。 我有一列数据,其值看起来几乎像嵌套的 json,但一些 jsons 在值之间有 \,我需要清理它们。

JSON 看起来像这样:

{"mopub_json":
   "{\"currency\":\"USD\",
   \"country\":\"US\",
   \"publisher_revenue\":0.01824}
"}

我需要将货币和发布商收入作为不同的列,然后试试这个:

SET json_serialization_enable TO true;
SET json_serialization_parse_nested_strings TO true;
SELECT
JSON_EXTRACT_PATH_TEXT(column_name, 'mopub_json', 'publisher_revenue') as revenue_mopub,
JSON_EXTRACT_PATH_TEXT(column_name, 'mopub_json', 'currency') as currency_mopub
FROM(
SELECT replace(column_name, "\t",  '')
FROM table_name)

我收到下一个错误:

[Amazon](500310) Invalid operation: column "\t" does not exist in events

当我尝试这个时:

SET json_serialization_parse_nested_strings TO true;
SELECT
JSON_EXTRACT_PATH_TEXT(column_name, 'mopub_json', 'publisher_revenue') as revenue_mopub,
JSON_EXTRACT_PATH_TEXT(column_name, 'mopub_json', 'currency') as currency_mopub
FROM(
SELECT replace(column_name, chr(92),  '')
FROM table_name)

我收到

Invalid operation: JSON parsing error

当我尝试在不替换的情况下提取值时,我收到的是空列。

感谢您的帮助!

所以您的 json 无效。 JSON 不允许多行文本字符串,但我预料到这个问题。根据您的查询,我认为您不需要单个键和字符串,而是整个结构。引号被反斜杠的原因是因为它们在字符串中。 json 应如下所示:

{
  "mopub_json": {
    "currency": "USD",
    "country": "US",
    "publisher_revenue": 0.01824
  }
}

那么你的 SQL 应该可以用了。