如何通过键从 JSON 字符串中提取值

Mav*_*ick 4 mysql sql json key-value

我有一个包含 Json 字符串记录的列。我想解析 json 并从 select 语句中获取特定键的值。

示例 JSON

{"kofaxDocId":"8ae16f46-c68f-11e5-8105-0e15fb39b661","systemDocType":"Loan Application","requestId":"c770a940-b9f3-4c41-aee6-3e08c1470ec6","docType":"Loan Application","confidence":0.6499999761581421,"engineType":"kofax","completionStatus":"Suggested"}
Run Code Online (Sandbox Code Playgroud)

我希望我的选择查询只获取键“置信度”的值。我尝试使用 Regex 和 Substring,但由于 json 长度不固定,因此它不会为所有记录获取正确的值。

我试过这些

SELECT substring(extended_metadata, ('"confidence":', extended_metadata ))  FROM documents ;

SELECT json_extract(extended_metadata,'confidence') CONFIDENCE from documents;
Run Code Online (Sandbox Code Playgroud)

我的 MYSQL 版本不支持 Json_extract()。

感谢帮助。

Kob*_*obi 6

MySQL 在 5.7.7 版本中获得了对 JSON 的支持 http://mysqlserverteam.com/json-labs-release-native-json-data-type-and-binary-format/

您必须完全在 mysql 中解析它,然后恐怕您必须将其视为字符串并从中删除值(只是普通的字符串函数或使用正则表达式)这并不优雅,但它会起作用

CREATE TABLE testjson (`jsonfield` varchar(2000)) ;

INSERT INTO testjson (`jsonfield`) VALUES ('{"kofaxDocId":"8ae16f46-c68f-11e5-8105-0e15fb39b661","systemDocType":"Loan Application","requestId":"c770a940-b9f3-4c41-aee6-3e08c1470ec6","docType":"Loan Application","confidence":0.6499999761581421,"engineType":"kofax","completionStatus":"Suggested"}')  ;


SELECT substring(jsonfield, locate('"confidence":',jsonfield)+13, locate(',"', jsonfield, locate('"confidence":',jsonfield))-locate('"confidence":',jsonfield)-13) as confidence_value
  FROM testjson;
Run Code Online (Sandbox Code Playgroud)

这个查询在你的jsondata中搜索Confidence,然后查看confidence之后的下一个分隔符,并减去这两个索引之间的内容。

这是上面示例的 SQL 小提琴:http : //sqlfiddle.com/#!9/2edfaf/3/0