Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何通过键从JSON字符串中提取值_Mysql_Sql_Json_Key Value - Fatal编程技术网

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

Mysql 如何通过键从JSON字符串中提取值,mysql,sql,json,key-value,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.649999976158142

我有一个包含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"}
我希望我的select查询只获取键“confidence”的值。我尝试使用Regex和Substring,但由于json长度不是固定的,因此它无法获取所有记录的正确值

我试过这些

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

SELECT json_extract(extended_metadata,'confidence') CONFIDENCE from documents;
我的MYSQL版本不支持Json_extract()


感谢您的帮助。

MySQL在5.7.7版中获得了对JSON的支持

你必须把它完全放在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;
这个查询搜索jsondata中的置信度,然后查看置信度之后的下一个分隔符,它会在这两个索引之间减去内容


下面是上面示例的一个SQL版本:

jour Mysql版本是什么?你能轻松升级吗?