在我们将其解析为 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,将其排序为数组。提取数据并填充到表格视图中?