Каков наилучший способ избежать данных MySQL для вывода в JSON? - PullRequest
0 голосов
/ 03 сентября 2011

Мне нужно выводить данные для javascript (массив массива) из MySQL
Я использую этот код, который отлично работает, за исключением того, что функция 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 ]

5 голосов
/ 03 сентября 2011

Лучший способ, вероятно, сделать это вне MySQL.

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

encode_json предоставляется JSON :: XS .

2 голосов
/ 03 сентября 2011
$sth=$dbh->prepare('
    SELECT d6id, d6name,d6date
    FROM d6lastdate
');
$sth->execute();
$json = encode_json($sth->fetchrow_arrayref());

encode_json предоставляется JSON :: XS , среди прочих.

1 голос
/ 16 сентября 2011

Использование PHP не всегда вариант (что, если вы хотите, чтобы хранимая процедура вставляла строку в таблицу, где одно или несколько полей являются строками в формате json?).

Ваш первоначальный подход почти хорош ... если вы исключаете, что результат недействителен JSON:

  • Вам необходимо использовать двойные кавычки (") вместо простых кавычек (') в качестве разделителя строк
  • Не забудьте также избежать обратной косой черты (\)
  • Если ваши строки содержат специальные символы, убедитесь, что они закодированы в UTF-8
  • Последняя запятая (,) вызовет проблему и должна быть удалена

Эрик

Редактировать: Вам также нужно экранировать возврат каретки, вкладки и несколько других символов. Посмотрите определение строки на этой странице: http://www.json.org. Вы можете проверить полученную строку json с помощью http://jsonlint.com.

0 голосов
/ 04 сентября 2011
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...