PhpMyAdmin 不会生成正确的 JSON 导出文件吗?用啥替换 Unix 上的 ^M 字符?

Posted

技术标签:

【中文标题】PhpMyAdmin 不会生成正确的 JSON 导出文件吗?用啥替换 Unix 上的 ^M 字符?【英文标题】:Doesn't PhpMyAdmin generate correct JSON export files? With what to replace ^M character on Unix?PhpMyAdmin 不会生成正确的 JSON 导出文件吗?用什么替换 Unix 上的 ^M 字符? 【发布时间】:2014-02-11 12:14:40 【问题描述】:

我使用 phpMyAdmin 工具在 JSON 文件中导出了一个 SQL 表。

我有一个这样的文件:

/**
 Export to JSON plugin for PHPMyAdmin
 @version 0.1
 */

// Database 'table_name'
// ...

["id": 7,"field1": "value1","field2": 2,"field3": "Lorem^M
ipsum^M
dolor^M
sit^M
amet","field4": "value4"]

很明显,第一行(即 cmets 无效,因为 JSON 不允许 cmets)。

我知道^M由 DOS/Windows 行尾字符引起的

删除 cmets 后运行 jsonlint myexportedfile.json 我得到了这个:

[Error: Parse error on line 1:
dolorld2": 2,"field3": "Lorem
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '', '[', got 'undefined']

不过,这是一种有效的 JSON 格式吗?我应该用什么字符替换^M 字符?换行(\\n),还是?

我希望能够在 NodeJS 中执行 require("./myexportedfile") 并获取数据然后进行一些更改。

【问题讨论】:

【参考方案1】:

使用 cmets 删除行后,您可以对文件应用以下 perl 命令:

perl -pi -e 's/\r\n/\n/g' 

它就地更改文件 (!) 删除其中的所有 ^M 并从中生成一个真正的 unix 文件。

【讨论】:

我运行perl -pi -e 's/\r\n/\n/g' myexportedfile.json,但它只是将^M 字符替换为空。 json文件仍然无效... :-( 这与 phpMyAdmin 无关。 ^M 是您的 JSON 数据的值,而将其替换为“无”是您目前唯一可以做的事情。我假设这些数据来自用户点击 RETURN 或将 DOS 文本复制到其中的某个文本框。删除 ^M 并粘贴到 JSONLINT 中给了我一个好的? 我找到了以下解决方法:导出为 csv,将^M 替换为空,转换为 JSON。

以上是关于PhpMyAdmin 不会生成正确的 JSON 导出文件吗?用啥替换 Unix 上的 ^M 字符?的主要内容,如果未能解决你的问题,请参考以下文章

phpMyAdmin 不会在数据库中正确显示 Unicode(utf-8)字符,但在网络中正确显示 [重复]

phpmyadmin 不会导入 funstuff.sql.zip 文件

Phpmyadmin 仅接受来自具有多个输入值的 json 数组中的一个条目

为啥在 phpmyadmin 中创建此表会生成 #1064 错误?

编辑我的 php.ini,但 phpmyadmin 仍然不会增加文件大小上传

通过 phpMyAdmin 将数据库转储导出到 MS SQL