在我们将其解析为 JSON 之前,Snowflake 如何转义对象数组字符串中的所有特殊字符?

Posted

技术标签:

【中文标题】在我们将其解析为 JSON 之前,Snowflake 如何转义对象数组字符串中的所有特殊字符?【英文标题】:Snowflake how to escape all special characters in a string of an array of objects before we parse it as JSON? 【发布时间】:2022-01-22 02:22:08 【问题描述】:

我们正在使用 javascript 程序将数据加载到雪花中。

脚本将遍历对象数组以加载一些数据。这些对象包含可能有特殊字符的字符串。

即:

“说明”:“此文件包含“敏感”信息。”

敏感词的双引号会变成:

“说明”:“此文件包含“敏感”信息。”

这破坏了加载脚本。

当我们在描述键中使用 html 标签时也发生了同样的问题:

"Description": "请使用特定字体更新文件"。

Snowflake 社区网站上的 is another example。

另外this post 建议将FIELD_OPTIONALLY_ENCLOSED_BY 设置为等于特殊字符,但我正在处理可能包含所有特殊字符的大型数据集。

我们如何在不更新脚本的情况下自动转义特殊字符并使用 JavaScript 循环整个数组以预测每个特殊字符并将其替换为其他字符?

编辑

我尝试使用JSON_EXTRACT_PATH_TEXT:

select JSON_EXTRACT_PATH_TEXT(parse_json('
    "description": "Please use \"Custom\" fonts"
  '), 'description');

并得到以下错误:

解析 JSON 时出错:缺少逗号,第 2 行,位置 33。

【问题讨论】:

你能分享你在SP里面的逻辑吗?您是否尝试过使用绑定变量? @EricLin 它是一个简单的 javascript 递归函数,循环遍历文件以构建对象数组,另一个合并语句将这个数组合并到一个表中。 【参考方案1】:

我认为JS过程生成的转义字符在传递给SQL函数时被转义了。

'"description": "Please use \"Custom\" fonts"'

变成

'"description": "Please use "Custom" fonts"'

因此,将它们解析为 JSON/从 JSON 获取字段失败。为避免错误,JavaScript 过程应生成双反斜杠而不是反斜杠:

'"description": "Please use \\"Custom\\" fonts"'

我认为没有办法在不修改 JavaScript 过程的情况下防止此错误。

【讨论】:

以上是关于在我们将其解析为 JSON 之前,Snowflake 如何转义对象数组字符串中的所有特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章

查找 JSON 对象大小而不将其解析为字符串

我如何解析 JSON,将其排序为数组。提取数据并填充到表格视图中?

如何解析 JSON 以将其转换为 Swift 中的对象数组?

如何将字符串转换为 JSON,以便我可以将其解析为对象

每秒解析千兆字节的JSON解析器开源,秒杀一大波解析器!

text 从S3获取JSON对象,将其解析为CSV,然后将其放回S3