powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблемы с новым типом данных JSON
28 сообщений из 28, показаны все 2 страниц
Проблемы с новым типом данных JSON
    #38674555
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал в таблице колонку d с типом JSON, вставил ["aa", "bbb", "cccc"]
Делаю select, далее на php

echo json_encode(array(
'data' => fetchAll(PDO::FETCH_ASSOC)
));
все гуд. Вот только в javascript
$.get(url, function(d){console.log(data);}, 'json');
приходит
{"aaData":[{"d":"[\"aa\", \"bbb\", \"cccc\"]"}]}
или что тоже самое
"["aa", "bbb", "cccc"]"
ну и соответственно, js считает это одним текстом, а не объектом из трех текстов
А вот если бы пришло

["aa", "bbb", "cccc"]
-то было бы все замечательно
Вопрос: что делать?
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38674643
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContra,

pg при чем тут? для чего json_encode?
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38674675
Гостьик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fetchAll вернул строку, Вы её сунули в массив и преобразовали в JSON, и получили то что получили
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38674699
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГостьикfetchAll вернул строку, Вы её сунули в массив и преобразовали в JSON, и получили то что получили
fetchAll вернул двухмерный массив(строки, поля). Я ожидаю ( и это разумно), что фечалл распетрушит и json объект и вернет вместо

Код: php
1.
2.
3.
4.
5.
array(
    '0' => array(
       'd' => "[\"aa\", \"bbb\", \"cccc\"]"
    )
)



более многомерный массив:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
array(
    '0' => array(
       'd' => array(
             '0' => 'aa',
             '1' => 'bb',
             '2' => 'cccc',
         )
    )
)


Разве это не то, чего стоит ожидать?
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38674704
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContra,

покажите результат запроса
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38674712
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_md,
А теперь понял Ваш набор букв.
Если убрать все ваши телодвижения и отдать результат сразу js то и проблем с новым типом не будет :)
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38674810
Гость_0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PCContraЯ ожидаю ( и это разумно), что[b] фечалл распетрушит и json объектДля этого нужно чтобы PDO понимал тип json, а он вряд ли это умеет. Попробуйте написать пожелание авторам PHP
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38674813
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость_0PCContraЯ ожидаю ( и это разумно), что[b] фечалл распетрушит и json объектДля этого нужно чтобы PDO понимал тип json, а он вряд ли это умеет. Попробуйте написать пожелание авторам PHPАга и про xml, hstore, и так далее чтоб вообще было круто, массивы полагаю тоже туда. После этого появится вопросы от любителей select * from обновил php и стал тормозить сервер :)
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38674824
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_mdSmeL_md,
А теперь понял Ваш набор букв.
Если убрать все ваши телодвижения и отдать результат сразу js то и проблем с новым типом не будет :)
Пробовал?
Если в js отдавать массив результата, то через джсон_енкоде. А вот как не кодировать поле - вот вопрос
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38674834
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContra,
Какая версия Postgres ? если 9.2 или ниже, то тип JSON для хранения - бесполезный. Разве что только, как сериализация хранения. Что бы быть уверенным что вы записали именно JSON а набор буков.

Также ваш пример вполне логичен. Почему вы решили, что должны с "[\"aa\",\ "bbb\", \"cccc\"]" получить ассоциативный массив, не понятно. Ведь JSON предусматривает только как тип хранения, для дальнейшей работы с индексами по нему, поиском и тд тп. Но это плюшки с версии слона 9.3.
Вы с Pg получаете строку, а не обьект. По этому, для начала избавтесь от слешей (stripslashes)и пропустите через json_encode и будет вам счастье. а PHP тут не виноват, он все делает правильно.
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675091
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContraSmeL_mdSmeL_md,
А теперь понял Ваш набор букв.
Если убрать все ваши телодвижения и отдать результат сразу js то и проблем с новым типом не будет :)
Пробовал?
Если в js отдавать массив результата, то через джсон_енкоде. А вот как не кодировать поле - вот вопрос
Только что, выполнил ajax запрос и без преобразований отдал в js и вывел 1 элемент массива т.е. aa
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675110
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_md,
Проверил с
Код: plaintext
[ "aa",  "bb" , "ccc"] 
и
Код: plaintext
{"d": [ "aa",  "bb" , "ccc"]}
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675125
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200PCContra,
Какая версия Postgres ? если 9.2 или ниже, то тип JSON для хранения - бесполезный. Разве что только, как сериализация хранения. Что бы быть уверенным что вы записали именно JSON а набор буков.

Также ваш пример вполне логичен. Почему вы решили, что должны с "[\"aa\",\ "bbb\", \"cccc\"]" получить ассоциативный массив, не понятно. Ведь JSON предусматривает только как тип хранения, для дальнейшей работы с индексами по нему, поиском и тд тп. Но это плюшки с версии слона 9.3.
Вы с Pg получаете строку, а не обьект. По этому, для начала избавтесь от слешей (stripslashes)и пропустите через json_encode и будет вам счастье. а PHP тут не виноват, он все делает правильно.
Версия 9.3.4
Я хочу чтобы с
Код: php
1.
2.
3.
$sth = $this->db->query("SELECT d FROM mytable;");
$arr = $sth->fetchAll(PDO::FETCH_ASSOC);
print_r($arr);


было:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
array(
    '0' => array(
       'd' => array(
             '0' => 'aa',
             '1' => 'bb',
             '2' => 'cccc',
         )
    )
)


Да, думаю дело в PDO. Он работает только с двумерным массивом, а поля рассматривает как строки. Тут либо феч алл рассматривать с каким-нибудь параметрами (типа "дополнительно разобрать все поля как массив"), либо другой тип хранения данных.
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675158
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал тип array, тоже не то
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675164
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContra,

Вы хотите модифицировать json объект для js? если да то нужен будет json_decode и потом json_encode, ну а если нет то и не трогайте его.
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675192
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогает только костыли в виде:
Код: php
1.
2.
3.
4.
5.
6.
$sth = $this->db->query("SELECT d FROM mytable;");
        $arr = $sth->fetchAll(PDO::FETCH_ASSOC);
        foreach($arr as $k => $v){
            $arr[$k]["d"] = json_decode($v["d"]);
        }
        echo json_encode($arr);


Т.е. надо заранее знать, какое поле у тебя json, какое -нет. Печаль
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675199
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот результат, какой я и ожидал:

Но несмотря на это, хотелось бы обходиться без ручного декодирования элементов в массиве
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675216
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContraНо несмотря на это, хотелось бы обходиться без ручного декодирования элементов в массивеТак не декодируйте заворачивайте Ваш фечОлл в json, Получив все это в js рассматривайте каждую строку как строку json, а не готовый json объект, но вы видимо не читаете мои ответы :)
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675225
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще второе решение, более изящное:
Код: php
1.
2.
3.
4.
5.
6.
7.
function data($d) {
            return array("d" => json_decode($d));
        }
            $sth = $this->db->query("SELECT d FROM mytable;");
            $arr = $sth->fetchAll(PDO::FETCH_FUNC, "data");
            return $arr;
    }
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675290
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot SmeL_md]PCContra, Получив все это в js рассматривайте каждую строку как строку json, а не готовый json объект
ну а далее-то в js мне надо работать с объектом: разложить все значения по <div>ам и так далее...
Что мне делать с этим: это же строка, а не объект. Как в js взять из нее текст, допустим, с индексом 2 (три буквы "б") ?
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675297
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675313
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot PCContra]SmeL_mdпропущено...

ну а далее-то в js мне надо работать с объектом: разложить все значения по <div>ам и так далее...
Что мне делать с этим: это же строка, а не объект. Как в js взять из нее текст, допустим, с индексом 2 (три буквы "б") ?Но вы же как то получили json объект :) а теперь тоже самое можно сделать для значения json объекта и Вы получите то что вам нужно.
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675329
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_mdНо вы же как то получили json объект :) а теперь тоже самое можно сделать для значения json объекта и Вы получите то что вам нужно.
16194331
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675358
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContraSmeL_mdНо вы же как то получили json объект :) а теперь тоже самое можно сделать для значения json объекта и Вы получите то что вам нужно.
16194331 И что Вы этим хотите сказать? что идея преобразовать строку json в объект, который потом просто поместить в архив и в конце все это опять завернуть json, вас не настораживает :)
по поводу того как из строки получить json
for ...
jQuery.parseJSON( json_string )
Видимо пора закругляться, топик вообще ни как к postgresql не относиться
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675407
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContrafetchAll вернул двухмерный массив(строки, поля). Я ожидаю ( и это разумно), что фечалл распетрушит и json объект и вернет вместо

нет, это не разумно!
выборка из базы, это масив строк, где каждая строка - масив елементов(полей/столбцов)

и вовсе не логично , если поле содержит упакованные данные, чтобы оно само распаковывалось. а главное зачем?

шифрованые данные тоже должны сами дешифроваться??? или их всётаки стоит дешифровать перед необходимостью получить самому???

есть тип геометрические фигуры - эти столбики что должы делать автоматически при ветч-асок??? вот многоугольник - во что должен сам превращаться?
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38675417
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PCContraПомогает только костыли в виде:
Код: php
1.
2.
3.
4.
5.
6.
$sth = $this->db->query("SELECT d FROM mytable;");
        $arr = $sth->fetchAll(PDO::FETCH_ASSOC);
        foreach($arr as $k => $v){
            $arr[$k]["d"] = json_decode($v["d"]);
        }
        echo json_encode($arr);


Т.е. надо заранее знать, какое поле у тебя json, какое -нет. Печаль

полная ерунда. а если бы само распаковало в масив, можно было бы работать с масивом и незнать, где у вас джейсон? всмысле покажите запрос которым вы сделали запись в базу, понятия не имея где джейсон а где нет?
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38681825
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453,
Для такого результат как хочет автор, можно реализовать свой парсер на PLPG.
Создал себе PLPg функцию, которая в качестве входящего параметра получает запрос, и возвращает текст.
При выполнении запроса в теле функции, можно проверить тип данных. Если он JSON. то не сложными манипуляциями, в самом теле можно сформировать нужный JSON ответ с использованием row_to_json. Также можно привести hstore к JSON.
Полученный ответ пропускаем через json_decode. И вуаля, на выходе имеем обьект/массив с учетом значений столбцов JSON. И самое главное с сохранением типов данных. Т.е если у меня где то столбец bool, то я в php тоже получу bool после json_decode, а не дескриптор в виде 'f' или 't'.
Конечно приходится использовать EXECUTE. Но при формировании логики на процедурах, без него все равно не обойтись. Тут уже нужно исходит из ситуации, стоит ли игра свеч.
Но зато, задача автора решается 100%. И не важно используете ли вы PDO или что то другое. Потому как с БД вы получает varchar который уже содержит сформированный JSON
В PHP это может выглядеть так.:
Код: plsql
1.
2.
3.
4.
5.
6.
 public function getSensorFields ()
    {
       $query= 'SElECT * FROM table';
        $this->dbase->query('SELECT * FROM to_json('.$query.')');
        return json_decode($this->dbase->getArrayValue('to_json'),true);
    }
...
Рейтинг: 0 / 0
Проблемы с новым типом данных JSON
    #38683401
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453и вовсе не логично , если поле содержит упакованные данные, чтобы оно само распаковывалось. а главное зачем?
<sarcasm>На самом деле, где тут логика?</sarcasm>
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблемы с новым типом данных JSON
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]