How can write queries in MySQL that can parse JSON data in a column? How can write queries in MySQL that can parse JSON data in a column? json json

How can write queries in MySQL that can parse JSON data in a column?


You could use json_extract (5.7 up).https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-extract

SELECT user_id, json_dataFROM articles WHERE json_extract(json_data, '$.title') LIKE '%CPU%';


I ended up solving in this way: https://github.com/ChrisCinelli/mysql_json with a UDF. I detailed how to compile it and install it in the README. It works for me on Ubuntu 12.04.5 on gcc version 4.6.3 with MySQL 5.5

You will be able to run:

SELECT json_get('{"a":1}', 'a')       => 1SELECT json_get('{"a":1}', 'b')       => NULLSELECT json_get('[1,2,3]', 2)         => 3SELECT json_get('{"a":[2]}', 'a', 0)  => 2#Also:SELECT json_get('{"a":{"b":2}}', 'a') => objectSELECT json_get('{"a":[1,2,3]}', 'a') => array# Verify if it is a valid JSON:SELECT ISNULL(json_get('{"a":1}'));   => 0  # ValidSELECT ISNULL(json_get('{"a":1'));    => 1  # Invalid# Create an example table:CREATE TABLE `message` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `data` text,  PRIMARY KEY (`id`));INSERT INTO message (id,data) VALUES(1,'{"from":"chris","title":"Awesome Article","body":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."}');INSERT INTO message (id,data) VALUES(2,'{"from":"loren","title":"Another Article","body":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."}');INSERT INTO message (id,data) VALUES(3,'{"from":"jason","title":"How to run a query","body":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."}');# Run queries on JSON values:SELECT json_get(data,'title') FROM message WHERE id=2;SELECT id,data FROM message WHERE json_get(data,'from')='chris';SELECT id,data FROM message WHERE json_get(data,'title') LIKE '%Article%';


Try the following query and see if it fits your needs:

SELECT user_id, json_dataFROM articlesWHERE common_schema.extract_json_value(json_data,'title')LIKE "%CPU%"

This will only work on MySQL version 5.1 or newer.