将SQL转储转换为JSON?

3
我有一个来自MediaWiki的SQL转储文件,想将其导出为JSON格式 - 我已经尝试了不同的方法,但似乎找不到任何解决方案。 SQL文件的格式如下:
DROP TABLE IF EXISTS `geo_tags`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `geo_tags` (
  `gt_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `gt_page_id` int(10) unsigned NOT NULL,
  `gt_globe` varbinary(32) NOT NULL,
  `gt_primary` tinyint(1) NOT NULL,
  `gt_lat` decimal(11,8) DEFAULT NULL,
  `gt_lon` decimal(11,8) DEFAULT NULL,
  `gt_dim` int(11) DEFAULT NULL,
  `gt_type` varbinary(32) DEFAULT NULL,
  `gt_name` varbinary(255) DEFAULT NULL,
  `gt_country` binary(2) DEFAULT NULL,
  `gt_region` varbinary(3) DEFAULT NULL,
  PRIMARY KEY (`gt_id`),
  KEY `gt_page_primary` (`gt_page_id`,`gt_primary`),
  KEY `gt_page_id_id` (`gt_page_id`,`gt_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4507036 DEFAULT CHARSET=binary ROW_FORMAT=DYNAMIC;

接下来是几行插入数据的代码。

INSERT INTO `geo_tags` VALUES (3,487781,'earth',1,59.00000000,10.00000000,1000,NULL,NULL,NULL,NULL)

每当我尝试将SQL文件导入到SQL中时,什么也不会发生。有没有简单的解决方案可以将我的数据转换为JSON?


1
这个非常容易使用,与您的示例配合得很好:http://www.csvjson.com/sql2json - Galz
@Galz 你完全正确!但是我有一个问题,似乎它只从INSERT INTO 'geo_tags' VALUES中获取第一个值,然后跳过其余的值 :/ 有什么想法吗? - Ivan Le Hjelmeland
2个回答

7
作为回答,因为无法在评论中发布图片。http://www.csvjson.com/sql2json 似乎可以处理多行数据。也许它有一些限制?
您要插入多少条记录?

enter image description here

更新 csvjson.com的Rockstar Martin Drapeau已经实现了我的功能请求,所以现在他的网站上可以使用mysqldump INSERT语法。在这里尝试一下。


我正在尝试插入大约400个记录,但我的SQL文件与你的不同之处在于,我的记录按逗号分隔并排列。像这样: INSERT INTO 'geo_tags' VALUES (....), (.....), (......) 等。 - Ivan Le Hjelmeland
是的,看起来它不支持那个。试着搜索一些其他的工具 - 那只是我找到的第一个。另外,如果这是一次性操作,你可以将查询转换为多个插入... 或者你可以去Github增强他/她的代码以支持你的用例! - Galz
1
我将此作为问题提交给开发该网站的好心人:https://github.com/martindrapeau/csvjson-app/issues/11 - Galz
顺便说一句 - 把mysqldump转换成CSV,再把CSV转换成JSON可能不是个坏主意... 也许有更多的工具可以分别完成这些步骤,而不是直接从dump到语法再到JSON。 - Galz
是的,昨晚我也给他发了封电子邮件,太棒了!!再次非常感谢你的帮助! - Ivan Le Hjelmeland
显示剩余2条评论

0
你可以使用命令行工具而不是使用网络服务:
# or install via pip
$ pipx install sqldump2json

# each insert statement converts to json object (JSONL)
$ sqldump2json -i testdata/dump.sql
{"table_name": "actor", "values": [1, "PENELOPE", "GUINESS", "2006-02-15 04:34:33"]}
{"table_name": "actor", "values": [2, "NICK", "WAHLBERG", "2006-02-15 04:34:33"]}
{"table_name": "actor", "values": [3, "ED", "CHASE", "2006-02-15 04:34:33"]}
...

# use jq to process json lines
$ sqldump2json -i testdata/dump.sql | jq -r 'select(.table_name == "actor").values | @tsv'
1       PENELOPE        GUINESS 2006-02-15 04:34:33
2       NICK    WAHLBERG        2006-02-15 04:34:33
3       ED      CHASE   2006-02-15 04:34:33

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接