2014-11-06 4 views
2

MySQL에서 JSON 데이터를 구문 분석하는 방법에 대한 도움이 필요합니다.MySQL에서 JSON 구문 분석

{"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'에 대한 데이터를 가져올 수 없습니다.

는 또한 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

이미 이상한 해킹 확장 구문을 사용하고 있습니다. 왜이 용도에 적합한 데이터베이스를 사용하지 않습니까? – ceejayoz

+0

감사합니다. 데이터는 이미 상속받은 MySQL 데이터베이스에 있습니다. 데이터를 파싱 할 방법을 찾아야합니다. 이 상황에서 나는 무엇을 할 수 있습니까? – user3726118

+1

JSON을 꺼내서 앱에서 파싱합니다. MySQL에서이 작업을 시도하는 것은 어리 석으며 재앙을 받기 쉽습니다. – ceejayoz

답변

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/ 참조).

이전 버전에있는 경우 이제

+0

감사합니다. 이 데이터를 빠르게 파싱하려면 무엇을 사용할 수 있습니까? – user3726118

0

어느 쪽이든 당신은 예를 https://github.com/ChrisCinelli/mysql_json

에 대한처럼 MySQL을위한 JSON을 구문 분석 성가신 MySQL의 UDF를 사용할 수 http://www.slideshare.net/mobile/SvetaSmirnova/mysql-json-functions

HTH 같은 UDF를 사용하여 시도 할 수 있습니다. 그러나 더 나은 방법은 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'과 같지 않습니다.