我有一个现有的PHP / MySQL应用程序,我正在尝试迁移到AngularJS / Firebase,这是学习这些新技术的一种方式。
该应用程序在MySQL中有自己的表格架构。一个这样的表看起来像:
CREATE TABLE `dictionary` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`word` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`wordmeaning` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`wordlength` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
我的问题是:如何将此表结构及其中的数据从MySQL迁移到Firebase?
我已尝试通过以下查询将数据导出为JSON字符串:
SELECT CONCAT("[",
GROUP_CONCAT(
CONCAT("{id:'",id,"',"),
CONCAT("word:'",word,"',"),
CONCAT("wordmeaning:'",wordmeaning,"',"),
CONCAT("wordlength:'",wordlength,"'}")
)
,"]")
AS json FROM dictionary;
这提供了一个有效的JSON字符串,例如:
[{id:'1',word:'cat',wordmeaning:'a mammal species',wordlength:'3'}, {id:'2',word:'catapult',wordmeaning:'throwing device',wordlength:'8'}, {id:'3',word:'cart',wordmeaning:'something to carry things in',wordlength:'4'}]
我将其保存在一个文件中,并尝试使用导入JSON按钮从Firebase导入文件,我得到了:解析JSON数据时出错。请验证您的输入。 (JSON字符串有效。我在http://jsonviewer.stack.hu/)
检查了它关于我可能做错的任何想法?我假设Firebase可以处理这些结构及其中的数据。
感谢。
答案 0 :(得分:40)
以防万一其他人在将来遇到这个问题时,有一种更简单的方法可以做到这一点。
您可以使用SQLYog等工具将MySQL表导出为CSV文件。
获得CSV文件后,您可以使用免费的在线工具将其转换为JSON格式,如下所示:http://www.convertcsv.com/csv-to-json.htm
我在大约15分钟内从MySQL导入了40个表到Firebase。希望能帮助别人!
答案 1 :(得分:11)
您的JSON无效。将其更改为有效:
[{"id":"1","word":"cat","wordmeaning":"a mammal species","wordlength":"3"},
{"id":"2","word":"catapult","wordmeaning":"throwing device","wordlength":"8"},
{"id":"3","word":"cart","wordmeaning":"something to carry things in","wordlength":"4"}]
所以这些是变化:
您可能需要考虑不引用id
和wordlength
的值,因为这些属性似乎是数字。
修改强>
这两个在线工具似乎正确验证了JSON(或者至少符合Firebase的预期):
第二个也很漂亮地打印了JSON,所以这可能是偏好其中一个的原因。
答案 2 :(得分:1)