20

我有一个现有的 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:'一种哺乳动物',wordlength:'3'},
{id:'2',word:'弹射器',wordmeaning:'投掷器',wordlength:'8'},
{id:'3',word:'cart',wordmeaning:'用来装东西的东西',wordlength:'4'}]

我将它保存在一个文件中,并尝试使用 Import JSON 按钮从 Firebase 导入文件,我得到:解析 JSON 数据时出错。请验证您的输入。(JSON 字符串是有效的。我在http://jsonviewer.stack.hu/进行了检查)

关于我可能做错了什么的任何想法?我假设 Firebase 可以处理这样的结构和其中的数据。

谢谢。

4

3 回答 3

50

以防万一其他人将来遇到这个问题,有一种更简单的方法可以做到这一点。

您可以使用 SQLYog 之类的工具将 MySQL 表导出到 CSV 文件。

获得 CSV 文件后,您可以使用免费的在线工具将其转换为 JSON 格式,例如:http: //www.convertcsv.com/csv-to-json.htm

我刚刚在大约 15 分钟内将 40 个表从 MySQL 导入到 Firebase。希望对某人有所帮助!

于 2014-07-19T17:56:43.033 回答
17

您的 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"}]

所以这些是变化:

  1. 使用双引号而不是单引号
  2. 在键周围加上(双)引号,而不仅仅是值

您可能需要考虑不引用 和 的值idwordlength因为这些属性似乎是数字。

编辑

这两个在线工具似乎可以正确验证 JSON(或至少符合 Firebase 的预期):

第二个也很好地打印了 JSON,所以这可能是偏爱其中一个的原因。

于 2013-09-20T17:01:59.613 回答
1

表数据导出向导支持以 JSON 格式导出数据

  1. 右键单击表名称并选择表数据导出向导

在此处输入图像描述

  1. 选择要导出的列值,在以下屏幕中,可以选择将数据导出为 csv/json

在此处输入图像描述

于 2021-05-16T16:19:53.700 回答