2014-11-06 28 views
2

我需要關於如何解析MySQL中的JSON數據的幫助。解析MySQL中的JSON

我可以分析包含數據的命名列的配置,例如:通過使用

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 

得到什麼,我需要

{"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} 

但是,我無法獲得'obs'的數據,它是幾個'行'的字段conceptid和價值。

進一步的OBS的「設置」經過任何引用到現場返回一個空

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解決這個...

克萊門斯

+0

你已經在使用一些奇怪的hacky擴展語法。爲什麼不使用適合這個的數據庫? – ceejayoz 2014-11-06 01:16:38

+0

謝謝。數據已經存在於我繼承的MySQL數據庫中。我必須找到解析數據的方法。在這種情況下我能做些什麼? – user3726118 2014-11-06 18:58:10

+1

拉出JSON並在您的應用中解析它。在MySQL中試圖做到這一點是愚蠢的,容易發生災難。 – ceejayoz 2014-11-06 19:06:23

回答

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/)。

如果你是一個早期版本,現在你可以嘗試使用UDF的像http://www.slideshare.net/mobile/SvetaSmirnova/mysql-json-functions

HTH

+0

謝謝。我能用什麼來快速解析這些數據? – user3726118 2014-11-06 18:56:58

0

要麼你可以使用繁瑣的MySQL UDF解析JSON爲MySQL例如像https://github.com/ChrisCinelli/mysql_json

。 ..但更好的方法是將JSON取出並在您的應用中解析它,也許將數據轉換爲適合您的意圖的更適合的模式。

4

這裏是在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'不一樣。