BigQuery:如何取消转义额外转义/序列化的 JSON 字符串

Posted

技术标签:

【中文标题】BigQuery:如何取消转义额外转义/序列化的 JSON 字符串【英文标题】:BigQuery: How to unescape an extra-escaped/serialized JSON string 【发布时间】:2021-12-15 18:36:48 【问题描述】:

我正在处理一个数据集,其中从服务中提取 JSON 字符串,并经过额外的字符串提取/处理层,因此字符串本身中的 JSON 语法已被转义。

作为示例更容易显示 - 这是一个 CSV,其中 body 是 JSON 格式的字符串:

id,body
1,"""name"":""hello"",""value"":9"
2,"""value"":42"

这是我正在使用的:

id,body
1,"""\""name\"":\""hello\"",\""value\"":9"""
2,"""\""value\"":42"""

如果我不得不猜测,就好像源服务正在拉入 body 的 JSON 格式字符串,就好像它期望被序列化为另一个 JSON 字符串中的字符串值一样。

无论如何,有没有一种直接的方法来取消转义这个字符串,以便我可以正常使用 JSON_EXTRACT 等?

【问题讨论】:

【参考方案1】:

似乎简单的解决方案是在字符串上运行JSON_EXTRACT_SCALAR,然后是我真正想做的JSON_EXTRACT操作,例如

SELECT 
  id
  , JSON_EXTRACT(JSON_EXTRACT_SCALAR(body, '$'), '$.value') AS value
FROM 
  datatable

【讨论】:

以上是关于BigQuery:如何取消转义额外转义/序列化的 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章

取消转义字符串中的 unicode

如何安全地为 bigquery 节点插入转义用户输入?可以在 bigquery.insert 节点库上使用参数化查询吗?

如何转义 HTML 或取消转义 HTML?

python常用转义字符串总结:各种字符转义的不同如何取消转义字符效果?

如何使用 Guava 取消转义 HTML 实体?

转义序列(反斜线)