【问题标题】:Parse JSON in MySQL在 MySQL 中解析 JSON
【发布时间】:2015-01-02 09:41:08
【问题描述】:

我需要有关如何在 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”的数据,它是字段概念 ID 和值的几“行”。

在 obs 的“集合”之后对字段的任何引用都返回 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 中解决这个问题...

克莱门斯

【问题讨论】:

  • 您已经在使用一些奇怪的 hacky 扩展语法。为什么不使用适合此的数据库?
  • 谢谢。数据已经在我继承的 MySQL 数据库中。我必须找到一种方法来解析数据。遇到这种情况我该怎么办?
  • 提取 JSON 并在您的应用程序中解析它。尝试在 MySQL 中执行此操作是愚蠢的,并且容易导致灾难。

标签: mysql json


【解决方案1】:

这是 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' 不同。

【讨论】:

  • 太棒了...我几乎要安装 UFD 来解析 JSON。这使我免于这样做......只是在使用它时对查询的性能感到困惑。
【解决方案2】:

您似乎正在使用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

【讨论】:

  • 谢谢。我可以用什么来快速解析这些数据?
【解决方案3】:

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

...但更好的方法是提取 JSON 并在您的应用程序中对其进行解析,并可能将数据转换为更适合您意图的模式。

【讨论】:

    猜你喜欢
    • 2016-06-24
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 2014-09-10
    • 1970-01-01
    相关资源
    最近更新 更多