首页 文章

将MySQL和INSERT名称/值对中的JSON字符串解析为MySQL

提问于
浏览
1
  • 我在'table_one'(MySQL)中有一个名为'other'的列,其中包含一个JSON字符串 .

  • 该表有数百万条记录 .

  • A.我想遍历'table_one',从'other'读取和B.将所有$值插入表2中相应的$ key列('table_two') . foreach $ row(?)

  • 我已经在'table_2'中创建了列 .

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

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

'other'中的JSON示例:

{"firstName": "Bob", "lastName": "Jones", "email": "bob.jones@yahoo.com", "address": "7206 maplehurst drive", "city": "PORT RICHEY", "state": "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 .

3 回答

  • 0

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

    看看common_schema,一个MySQL附加库:http://code.google.com/p/common-schema/它有一个使用XPath说明符的extract_json_value函数 . 需要注意的是,它似乎在数组中喜欢不带引号的数字值 .

    是的,common_schema做了其他很酷的事情 .

    这个UDF更强大,可以解析(格式正确)JSON字符串: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+ has native JSON fields and functions . JSON函数使用路径,功能强大且速度相当快 . 使用生成的(存储的)字段(希望虚拟字段的索引支持)有一个稍微复杂的索引机会 . 注意事项(截至5.7.9):MySQL可能会重新排序您的密钥,并且丢弃重复密钥的后续值(这与丢弃重复密钥的先前值的许多其他JSON处理程序不同) .

  • 0

    我不知道标准功能,我根据自己的心情以两种方式完成 .

    Reliable method: 编写PHP脚本以从DB读取,使用json_decode将json数据转换为数组,最后写回DB

    Quick method(when I m lazy do to in proper way): 使用locate和substring获取键之后的值,直到下一个键,如下所示

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

    mysql_json - 用于在gcc版本4.6.3上使用MySQL 5.5解析Ubuntu 12.04.5上的JSON Works的MySQL UDF

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

相关问题