2016-02-16 2 views
1

У меня есть столбец с строковыми записями Json. Я хочу проанализировать json и получить значение определенного ключа из инструкции select.Как извлечь значение ключа из строки JSON в MySQL

Пример 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"} 

Я хочу, чтобы мой запрос на выборку для выборки только значение ключа «доверия». Я пытался использовать Regex и Substring, но поскольку длина json не фиксирована, она не выводит правильные значения для всех записей.

я попробовал эти

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

SELECT json_extract(extended_metadata,'confidence') CONFIDENCE from documents; 

Json_extract() не поддерживается с моей версией MYSQL.

Цените помощь.

+0

Что такое jour Mysql версия? Можете ли вы легко его обновить? – Kobi

ответ

1

MySQL получил поддержку JSON в версии 5.7.7 http://mysqlserverteam.com/json-labs-release-native-json-data-type-and-binary-format/

Вы должны resolive его чисто в 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, а затем посмотреть на следующем сепараторе после уверенности, и вычитать содержимое между этими двумя индексом.