在MySQL中解析JSON

时间:2014-11-06 01:01:41

标签: mysql json

我需要有关如何在MySQL中解析JSON数据的帮助。

我可以解析名为config的列,其中包含以下数据:

{"encounterId":"f45bf821-98e1-4496-82ef-047971e168cb","providerId":"38001853-d2e1-4361-9fff-cfca1aedf406","patientId":"f4d04edb-652f-427c-ac25-6fecbda2a0aa","obs":[{"conceptId":"4e903795-ad79-48fc-851e-9e67c9628e6b","value":0.0},{"conceptId":"5300c3e4-3b53-4a0b-874b-3060d18cec9b","value":"Q"},{"conceptId":"dded4485-6160-4791-a13d-16c87f5004dc","value":"000019"},{"conceptId":"4e503f63-caa0-419a-8670-112441d228da","value":"girl"}],"dateCreated":"Dec 5, 2012 9:39:01 AM","formId":"ETAT","locationId":"","created":1354693141902}

使用

select common_schema.get_option(be.config,'encounterid') AS eid
, common_schema.get_option(be.config,'providerid') AS gender
, common_schema.get_option(be.config,'patientid') AS pid
from bencounter be

得到我需要的东西。

但是,我无法得到'obs'的数据,这是几个字段的“行”和值。

在'set'之后对字段的任何引用都会返回null

select common_schema.get_option(be.config,'encounterid') AS eid
, common_schema.get_option(be.config,'providerid') AS gender
, common_schema.get_option(be.config,'patientid') AS pid
, common_schema.get_option(be.config,'formId') AS formid -- THIS RETURNS NULL
from bencounter be

有人可以帮我解决这个问题。

我想直接在MySQL中解决这个问题......

克莱门

3 个答案:

答案 0 :(得分:6)

这是MySQL 5.7语法的解决方案:

select be.config->'$.encounterId' AS eid
, be.config->'$.providerId' AS gender
, be.config->'$.patientId' AS pid
, be.config->'$.formId' AS formid
from bencounter be \G

输出:

*************************** 1. row ***************************
   eid: "f45bf821-98e1-4496-82ef-047971e168cb"
gender: "38001853-d2e1-4361-9fff-cfca1aedf406"
   pid: "f4d04edb-652f-427c-ac25-6fecbda2a0aa"
formid: "ETAT"

请记住,JSON中的字段键区分大小写。例如,'formId''formid'不同。

答案 1 :(得分:1)

您似乎正在使用https://common-schema.googlecode.com/svn/trunk/common_schema/doc/html/get_option.html。它指定不支持子管理,我认为这是你的问题。

Mysql不是解析JSON的好工具。

我认为像5.7这样的未来版本有一些努力可以开始包含对JSON的一些支持(参见http://blog.ulf-wendel.de/2014/mysql-5-7-http-plugin-mysql/)。

如果您使用的是早期版本,则可以尝试使用http://www.slideshare.net/mobile/SvetaSmirnova/mysql-json-functions

等UDF

HTH

答案 2 :(得分:0)

您可以使用繁琐的MySQL UDF来解析MySQL的JSON,例如https://github.com/ChrisCinelli/mysql_json

...但更好的方法是提取JSON并在您的应用中解析它,并可能将数据转换为更适合您的意图的架构。