【问题标题】:Parse JSON string from MySQL and INSERT name/value pairs into MySQL将 JSON 字符串从 MySQL 和 INSERT 名称/值对解析到 MySQL
【发布时间】:2013-03-18 16:23:54
【问题描述】:
  1. 我在 'table_one' (MySQL) 中有一个名为 'other' 的列,其中包含一个 JSON 字符串。

  2. 该表有数百万条记录。

  3. A.我想遍历“table_one”,从“其他”读取和 B. 将所有 $values 插入表 2 ('table_two') 中它们对应的 $key 列中。 foreach $row (?)

  4. 我已经在“table_2”中创建了列。

  5. 我宁愿不(我认为)从“table_one”创建一个静态文件 (/path/some.json),因为与直接从数据库中读取相比,它似乎效率低。

    李>
  6. JSON 中的某些值将为空,并且缺少某些键/值对。因此,能够“动态地”获取 $key(s) 和 $value(s)(如果它们不存在则不会出错)是理想/关键的。

“其他”中的 JSON 示例:

{“firstName”:“Bob”,“lastName”:“Jones”,“email”:“bob.jones@yahoo.com”,“address”:“7206 maplehurst drive”,“city”:“PORT RICHEY”、“州”:“FL”、“zip”:“34668”、“ipAddress”:“208.54.85.233”、“gender”:“M”、“employer_name”:“bobs auto”、“months_address”: "2", "years_address": "12"}

您会(我会)认为现在会有标准功能来解决这个问题。如果有,我再次道歉。

目前,我正在使用 ETL 工具来执行一个简单但异常复杂的修剪/拆分/映射过程。每个 JSON 字符串有 45 对。表结构的任何细微调整都需要重新映射整个事物。

*适用于 PHP、MySQL、JavaScript、jQuery。

【问题讨论】:

    标签: php mysql json


    【解决方案1】:

    110 天前提出的问题有点晚了,但是...

    看看 common_schema,一个 MySQL 附加库: http://code.google.com/p/common-schema/ 它有一个使用 XPath 说明符的 extract_json_value 函数。需要注意的是,它不会解析 JSON 数组(只是将数组值作为空格分隔的字符串返回)并且似乎不喜欢数组中未加引号的数字值。

    是的,common_schema 还可以做其他很酷的事情。

    更强大的是这个可以解析(格式良好的)JSON 字符串的 UDF: https://github.com/kazuho/mysql_json

    在带有 MySQL 5.5.29 的 Ubuntu 10.04.4 LTS 上轻松编译,而且速度非常快。需要注意的是,当它解析为不是值的东西时,它会返回字符串“object”,并且需要指定一系列属性键比 common_schemas.extract_json_value 的 XPath 说明符更尴尬。

    更新:唉,common_schema a) 已关闭,b) 与 MySQL 5.7 不兼容。 Percona 可能会在某个时候更新它,但我没有屏住呼吸。

    更新:MySQL 5.7.8+ 具有原生 JSON 字段和函数。 JSON 函数使用路径,健壮且相当快。使用生成(存储)字段(希望虚拟字段的索引支持)有一个稍微复杂的索引机会。注意事项(从 5.7.9 开始):MySQL 可能会重新排序您的键,并丢弃重复键的后续值(这与许多其他丢弃重复键的先前值的 JSON 处理程序不同)。

    【讨论】:

      【解决方案2】:

      我不知道标准功能,bt我根据自己的心情做了两种方式。

      可靠的方法: 编写PHP脚本从DB读取,使用json_decode将json数据转为数组,最后写回DB

      快速方法(当我懒惰时以适当的方式): 使用定位和子字符串获取键之后的值直到下一个键,如下所示

      substring(task_time_breakup, locate('","key1":"', task_time_breakup)+7, locate('""}',task_time_breakup)-locate('","key1":"', task_time_breakup)-7 )
      

      【讨论】:

      • 感谢彼得和 cjg。你能详细说明“可靠的方法”吗?我可以连接到数据库,但转换为数组并将其重新加载是我可以使用更多指导的地方。再次感谢!
      【解决方案3】:

      mysql_json - 用于解析 JSON 的 MySQL UDF 在 gcc 版本 4.6.3 和 MySQL 5.5 上的 Ubuntu 12.04.5 上工作

      它有说明如何安装和如何使用它的例子: https://github.com/ChrisCinelli/mysql_json

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-25
        • 2019-11-27
        • 2016-09-01
        • 1970-01-01
        • 2012-05-25
        • 2021-10-28
        • 1970-01-01
        • 2018-04-13
        相关资源
        最近更新 更多