You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL解析含特殊引号的JSON字段报错问题求助

JSON字段解析问题解决方法(MySQL/PostgreSQL)

问题说明

原始metadata数据格式如下:

metadata 
-----------
{'a': 'jay', 'b': '100', 'c': ""ANAND'S STORE"", 'd': '200'}

尝试使用json_extract_path_text(metadata, 'c') as store_name解析时,出现错误:Error parsing JSON: more than one document in the input,期望解析后得到如下格式结果:

a       b          c             d
----------------------------------------
jay | 100   |  ANAND'S STORE |  200

问题根源:原始数据不是标准JSON格式——标准JSON要求用双引号包裹键和字符串,而这里用了单引号,且字段c的字符串嵌套了多余双引号,导致JSON解析器无法正常识别。


MySQL解决方案

先通过字符串替换将原始数据转换为标准JSON,再用JSON函数解析:

方法1:使用JSON_EXTRACT + JSON_UNQUOTE

SELECT
  JSON_UNQUOTE(JSON_EXTRACT(cleaned_metadata, '$.a')) AS a,
  JSON_UNQUOTE(JSON_EXTRACT(cleaned_metadata, '$.b')) AS b,
  JSON_UNQUOTE(JSON_EXTRACT(cleaned_metadata, '$.c')) AS c,
  JSON_UNQUOTE(JSON_EXTRACT(cleaned_metadata, '$.d')) AS d
FROM (
  -- 替换单引号为双引号,同时去除字段c的多余双引号
  SELECT REPLACE(REPLACE(metadata, '''', '"'), '""', '"') AS cleaned_metadata
  FROM your_table
) t;

方法2:使用JSON_VALUE(MySQL 8.0及以上版本支持)

SELECT
  JSON_VALUE(cleaned_metadata, '$.a') AS a,
  JSON_VALUE(cleaned_metadata, '$.b') AS b,
  JSON_VALUE(cleaned_metadata, '$.c') AS c,
  JSON_VALUE(cleaned_metadata, '$.d') AS d
FROM (
  SELECT REPLACE(REPLACE(metadata, '''', '"'), '""', '"') AS cleaned_metadata
  FROM your_table
) t;

PostgreSQL解决方案

先修正格式为标准JSON,再用PostgreSQL的JSON类型解析:

方法1:使用->>运算符(推荐)

SELECT
  cleaned_metadata ->> 'a' AS a,
  cleaned_metadata ->> 'b' AS b,
  cleaned_metadata ->> 'c' AS c,
  cleaned_metadata ->> 'd' AS d
FROM (
  -- 修正格式并转换为jsonb类型
  SELECT REPLACE(REPLACE(metadata, '''', '"'), '""', '"')::jsonb AS cleaned_metadata
  FROM your_table
) t;

方法2:使用json_extract_path_text

SELECT
  json_extract_path_text(cleaned_metadata, 'a') AS a,
  json_extract_path_text(cleaned_metadata, 'b') AS b,
  json_extract_path_text(cleaned_metadata, 'c') AS c,
  json_extract_path_text(cleaned_metadata, 'd') AS d
FROM (
  SELECT REPLACE(REPLACE(metadata, '''', '"'), '""', '"')::json AS cleaned_metadata
  FROM your_table
) t;

内容的提问来源于stack exchange,提问作者loving_guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:45:37