时间:2011-09-02 22:08:45

标签: javascript mysql json perl escaping

我需要从MySQL输出javascript (数组数组)的数据 我正在使用这个代码,除了REPLACE函数外,它工作正常 我需要修改所有文本进入JS数组的反向彗星' - '按照JS格式可用于1 go 中的所有字段。
我需要一个可以转义所有数据的替换函数,即\ -> \\; ' -> \'; newline -> \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'],

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:2)

答案 2 :(得分:1)

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

你的初始方法几乎是好的...如果你的结果是无效的JSON:

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

埃里克

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

答案 3 :(得分:0)

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);