powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблемы с новым типом данных JSON
25 сообщений из 28, страница 1 из 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
25 сообщений из 28, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблемы с новым типом данных JSON
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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