解析 JSON 时出错:输入中有多个文档(Redshift 到 Snowflake SQL)
Posted
技术标签:
【中文标题】解析 JSON 时出错:输入中有多个文档(Redshift 到 Snowflake SQL)【英文标题】:Error parsing JSON: more than one document in the input (Redshift to Snowflake SQL) 【发布时间】:2021-10-15 12:47:50 【问题描述】:我正在尝试将查询从 Redshift 转换为 Snowflake SQL。
Redshift 查询如下所示:
SELECT
cr.creatives as creatives
, JSON_ARRAY_LENGTH(cr.creatives) as creatives_length
, JSON_EXTRACT_PATH_TEXT(JSON_EXTRACT_ARRAY_ELEMENT_TEXT (cr.creatives,0),'previewUrl') as preview_url
FROM campaign_revisions cr
Snowflake 查询如下所示:
SELECT
cr.creatives as creatives
, ARRAY_SIZE(TO_ARRAY(ARRAY_CONSTRUCT(cr.creatives))) as creatives_length
, PARSE_JSON(PARSE_JSON(cr.creatives)[0]):previewUrl as preview_url
FROM campaign_revisions cr
似乎 JSON_EXTRACT_PATH_TEXT 转换不正确,因为 Snowflake 查询导致错误:
解析 JSON 时出错:输入中有多个文档
cr.creatives 的格式如下:
"[""previewUrl"":""https://someurl.com/preview1.png"",""device"":""desktop"",""splitId"":null,""splitType"":null,""previewUrl"":""https://someurl.com/preview2.png"",""device"":""mobile"",""splitId"":null,""splitType"":null]"
【问题讨论】:
检查 JSON 以及它是如何进入 Snowflake 的。 JSON 无效。它不应该以双引号开头。 JSON 通常应以左方括号[
或左大括号
开头(极少数例外情况是 JSON 由单个字符串、null、true 或 false 值组成)。此外,整个 JSON 中有 2 个双引号 ""
,这也是无效的 JSON。
您也可以使用 check_json 函数来验证 json。详情:docs.snowflake.com/en/sql-reference/functions/check_json.html
谢谢 - 将 JSON 中的双引号 ""
更改为单引号 "
解决了它!
【参考方案1】:
在我看来,您没有在 Snowflake 中使用有效的 JSON 数据。
请检查用于复制到命令的文件格式。
如果您打开文本编辑器中提供的“JSON”文本,请注意,由于您的引用,信息不会被解析或格式化为 JSON。一旦处理了双引号/转义引号的问题,您应该能够取得良好的进展
左侧的正确 JSON ||右侧原始数据
如果您不打算重新加载数据,请查看是否可以创建 javascript 用户定义函数来删除字符串中的引号,然后您可以使用 Snowflake 来处理变量列。
以下代码正在运行 POJO,可用于为您删除双引号。
var textOriginal = '[""previewUrl"":""https://someurl.com/preview1.png"",""device"":""desktop"",""splitId"":null,""splitType"":null,""previewUrl"":""https://someurl.com/preview2.png"",""device"":""mobile"",""splitId"":null,""splitType"":null]';
function parseText(input)
var a = input.replaceAll('""','\"');
a = JSON.parse(a);
return a;
x = parseText(textOriginal);
console.log(x);
【讨论】:
以上是关于解析 JSON 时出错:输入中有多个文档(Redshift 到 Snowflake SQL)的主要内容,如果未能解决你的问题,请参考以下文章
Spotify API:将曲目添加到播放列表:解析 JSON 时出错