如何在BigQuery中将JSON作为原始字符串解析获取age字段完整值
解决JSON字段带转义双引号的提取问题
你的核心问题是SQL字符串转义规则与JSON转义规则冲突,导致传入解析函数的JSON不合法,最终返回空结果。以下是针对不同SQL引擎的解决方案:
SQL Server
SQL Server中用两个双引号表示字符串里的一个双引号,无需反斜杠:
SELECT JSON_VALUE(data, '$.age') AS age FROM ( SELECT '{"name": "Jakob", "age":"""6"""}' AS data ) a;
执行后会返回"6",即你期望的""6""(结果显示时双引号会被包裹)。
MySQL
MySQL中反斜杠是转义字符,要表示JSON里的转义双引号,需要写两个反斜杠:
SELECT JSON_EXTRACT(data, '$.age') AS age FROM ( SELECT '{"name": "Jakob", "age":"\\"6\\""}' AS data ) a;
返回结果为"\"6\"",实际显示等价于"6"。
BigQuery
BigQuery同样需要用双反斜杠转义,使用JSON_EXTRACT_SCALAR即可:
SELECT JSON_EXTRACT_SCALAR(data, '$.age') AS age FROM ( SELECT '{"name": "Jakob", "age":"\\"6\\""}' AS data ) a;
返回结果为"6",符合预期。
关键原因
你之前的查询中,SQL会把字符串里的\"直接解析为",导致生成的JSON变成{"name": "Jakob", "age":"6"}(age的值丢失了闭合引号),属于非法JSON,因此解析函数返回空。调整转义方式后,JSON结构合法,就能正确提取带双引号的age值。
内容的提问来源于stack exchange,提问作者user22520287
相关产品推荐
相关产品推荐

