2016-03-15 3 views
0

Я использую Mysql версии следующим образом:Разбор данных JSON в Mysql

mysql> SHOW VARIABLES LIKE "%version%" 
    -> 
    -> ; 
+-------------------------+------------------------------+ 
| Variable_name   | Value      | 
+-------------------------+------------------------------+ 
| innodb_version   | 5.6.26      | 
| protocol_version  | 10       | 
| slave_type_conversions |        | 
| version     | 5.6.26      | 
| version_comment   | MySQL Community Server (GPL) | 
| version_compile_machine | x86_64      | 
| version_compile_os  | osx10.8      | 
+-------------------------+------------------------------+ 
7 rows in set (0.00 sec) 

У меня есть таблица с именем tag и внутри него, у меня есть столбец с именем texttagconfig. Этот столбец содержит данные в формате JSON, которые хранятся в виде строки в следующем:

{ "option":{ "secure":"0" , "onetime":"0" , "rtmp":"1" , "hls":"0" , "http":"0" } , "video":[{ "format":"mp4" , "codec":"h264" , "bitrate":"800" , "width":"" , "height":"" , "fps":"" , "audiocodec":"mp3" , "audiobitrate":"96" }] } 

Я хочу, чтобы найти число элементов внутри video массива в данных JSON.

Я попытался с помощью common_schema, как следующее:

SELECT common_schema.get_option(be.tagconfig,'option') as t 
from tag be LIMIT 200; 

Однако, я получаю все значения как null. Предпочтительно, я хочу создать другой столбец, который имеет количество элементов в массиве video в json-данных. Есть ли прямой способ в mysql сделать это?

+2

Лучше сделать эту работу в уровень приложения. Разбор данных json в 'MySQL' слишком громоздкий! – 1000111

+0

Если вы не обновите его до 5.7, который уже встроен в функции json. –

ответ

0

common_schema имеет другую функцию, называемую функцией extract_json_value, которая может обеспечить именно то, что вам нужно здесь. Он лучше используется из сложного объекта json, подобного тому, который у вас есть. Под капотом он использует функцию json_to_xml преобразовать JSON в формат XML и позволяет использовать XPaths, чтобы пройти через объект

SELECT common_schema.extract_json_value(be.tagconfig, 'count(//video)') as COUNT 

выше запрос должен получить, что вам нужно