将 MySQL 数据转义为 JSON 的最佳方法是什么?

发布于 2024-12-03 06:15:35 字数 712 浏览 2 评论 0原文

我需要从 MySQL 输出 JavaScript 数据(数组的数组)
我正在使用这段代码,除了 REPLACE 函数之外,它工作正常
我需要修改进入 JS 数组的倒逗号“--”的所有文本按照 JS 格式。并且可以一次性用于所有字段
我需要一个替换函数来转义所有数据,即 \ -> \\; <代码>'-> \'; 换行符 -> \n

$sth=$dbh->prepare('
    SELECT GROUP_CONCAT(
        "\n[\'",
        CONCAT_WS("\',\'", d6id, REPLACE(d6name,"\'","\\\\\'"), d6date),
        "\']"
    )
    FROM d6lastdate
');
$sth->execute();($json)=$sth->fetchrow_array();

输出

['0000000001','CA\'T','2011-09-26'],
['0000000002','CWE','2011-09-23'],
['0000000003','MAT','0000-00-00'],

I need to output data for javascript (array of array) from MySQL
I am using this code, which works fine except that REPLACE function
I need to modify all the text that goes into JS array's inverted comas ' -- ' as per JS format. And can be used for all the fields in 1 go.
I need a replace function that will escape all data, i.e. \ -> \\ ; ' -> \' ; newline -> \n

$sth=$dbh->prepare('
    SELECT GROUP_CONCAT(
        "\n[\'",
        CONCAT_WS("\',\'", d6id, REPLACE(d6name,"\'","\\\\\'"), d6date),
        "\']"
    )
    FROM d6lastdate
');
$sth->execute();($json)=$sth->fetchrow_array();

Output

['0000000001','CA\'T','2011-09-26'],
['0000000002','CWE','2011-09-23'],
['0000000003','MAT','0000-00-00'],

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

黑凤梨 2024-12-10 06:15:35

最好的方法可能是在 MySQL 之外执行此操作。

$data = $sth->fetchrow_arrayref();
$json = encode_json($data);

encode_jsonJSON::XS 提供。

The best way is probably to do this outside of MySQL.

$data = $sth->fetchrow_arrayref();
$json = encode_json($data);

encode_json is provided by JSON::XS.

断爱 2024-12-10 06:15:35
$sth=$dbh->prepare('
    SELECT d6id, d6name,d6date
    FROM d6lastdate
');
$sth->execute();
$json = encode_json($sth->fetchrow_arrayref());

encode_jsonJSON::XS 提供,其中其他的。

$sth=$dbh->prepare('
    SELECT d6id, d6name,d6date
    FROM d6lastdate
');
$sth->execute();
$json = encode_json($sth->fetchrow_arrayref());

encode_json is provided by JSON::XS, among others.

ぃ弥猫深巷。 2024-12-10 06:15:35

使用 PHP 并不总是一种选择(如果您希望存储过程在表中插入一行,其中一个或多个字段是 json 格式的字符串,该怎么办?)。

您最初的方法几乎很好...如果您除了结果不是有效的 JSON:

  • 您需要使用双引号 (") 而不是简单的引号 (') 作为字符串分隔符
  • 不要忘记转义反斜杠 (\) 如果您的字符串包含特殊字符,请
  • 确保它们以 UTF-8 编码
  • 最后一个逗号 (,) 将导致问题,需要删除

Eric

编辑:您还需要转义回车符、制表符和一些其他字符。看看这个页面上的字符串定义:http://www.json.org
您可以使用 http://jsonlint.com 验证生成的 json 字符串。

Using PHP is not always an option (what if you want a stored procedure to insert a row in a table, where one or more fields are json formatted strings?).

Your initial approach is almost good... if you except that the result is not valid JSON:

  • You need to use double quotes (") instead of simple quotes (') as string delimiter
  • Don't forget to escape the backslash (\) too
  • If your strings include special characters, be sure that they are encoded in UTF-8
  • The last comma (,) will cause issue and need to be removed

Eric

Edit: You also need to escape carriage returns, tabs and a few other characters. Have a look at string definition on this page: http://www.json.org .
You may validate your resulting json string with http://jsonlint.com .

柠栀 2024-12-10 06:15:35
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 0;

$sth=$dbh->prepare('
    SELECT d6tag, d6id, d6name, d6cat, d6date
    FROM d6lastdate
    ORDER BY d6date
');$sth->execute();

$json=Dumper($sth->fetchall_arrayref);
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 0;

$sth=$dbh->prepare('
    SELECT d6tag, d6id, d6name, d6cat, d6date
    FROM d6lastdate
    ORDER BY d6date
');$sth->execute();

$json=Dumper($sth->fetchall_arrayref);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文