powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / SQLite [игнор отключен] [закрыт для гостей] / sqlite json1 разбить элементы array на строки выборки
11 сообщений из 11, страница 1 из 1
sqlite json1 разбить элементы array на строки выборки
    #39939073
vdix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста как разбить массив json на элементы и объяденить их с другими колонками строки
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE IF NOT EXISTS TestTable (Id int, JsonValue TEXT);
SELECT load_extension('json1.dll');
INSERT INTO TestTable (Id, JsonValue) values (1, '{"Header":[{"ArrayElement":"foo"},{"ArrayElement":"bar"}]}');
INSERT INTO TestTable (Id, JsonValue) values (2, '{"Header":[{"ArrayElement":"baz"},{"ArrayElement":"quux"}]}');

/* вот тут хочется получить на выход 3 строки вида:
1 foo
1 bar
2 baz
*/
--select Id, json_extract(JsonValue, ''$.Header.ArrayElement[]'') as ArrayElement from TestTable where length(ArrayElement)=3;
...
Рейтинг: 0 / 0
sqlite json1 разбить элементы array на строки выборки
    #39939154
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
sqlite json1 разбить элементы array на строки выборки
    #39939189
vdix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я предположил, что это может быть что-то вроде
Код: sql
1.
select Id, json_tree(JsonValue, '$.Header.ArrayElement') from TestTable where length(ArrayElement)=3;


Но на этом моменте столкнулся с ошибкой "no such function: json_tree", исходник брал отсюда: https://www.sqlite.org/src/file/ext/misc/json1.c
...
Рейтинг: 0 / 0
sqlite json1 разбить элементы array на строки выборки
    #39939296
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdix
Я предположил, что это может быть что-то вроде
Код: sql
1.
select Id, json_tree(JsonValue, '$.Header.ArrayElement') from TestTable where length(ArrayElement)=3;


Но на этом моменте столкнулся с ошибкой "no such function: json_tree", исходник брал отсюда: https://www.sqlite.org/src/file/ext/misc/json1.c
Взял исходник и?
Скомпилировал? С чем именно? Подключил?
https://sqlite.org/loadext.html
...
Рейтинг: 0 / 0
sqlite json1 разбить элементы array на строки выборки
    #39939484
vdix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
Скомпилил с помощью mingw:
автор"C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\gcc.exe" -g -shared json1.c -o json1.dll
Использую через UniDAC 7.4.12, подключил через SQL скрипт:
Код: sql
1.
SELECT load_extension('json1.dll');


Функция json_extract() выполняется, а вот json_tree() - пишет не найдена. Расширение точно подключилось, потому что UniDAC без расширения json1.dll функцию json_extract() не знает.
...
Рейтинг: 0 / 0
sqlite json1 разбить элементы array на строки выборки
    #39939591
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу.... Увы, но дальше уже без меня. У меня нет ни Винды ни Дельфи.

Возможно, у этой версии UniDAC какая-то "непереносимость" виртуальных таблиц. Потому что json_tree() их использует а json_extract() нет. Попробуй обновить UniDAC до свежайшей версии.
...
Рейтинг: 0 / 0
sqlite json1 разбить элементы array на строки выборки
    #39939648
vdix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял. Может действительно в этом и проблема, спасибо.
...
Рейтинг: 0 / 0
sqlite json1 разбить элементы array на строки выборки
    #40034345
JeyCi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vdix

Функция json_extract() выполняется, а вот json_tree() - пишет не найдена. Расширение точно подключилось.

потому что json_extract() используется, как функция в SELECT,
а json_tree() и json_each() в FROM - т.е. не совсем функция ...
авторThe json_each(X) and json_tree(X) table-valued functions walk the JSON value provided as their first argument and return one row for each element
https://www.sqlite.org/json1.html
...
Рейтинг: 0 / 0
sqlite json1 разбить элементы array на строки выборки
    #40034349
JeyCi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vdix
Подскажите пожалуйста как разбить массив json на элементы
/* вот тут хочется получить на выход 3 строки вида:
1 foo
1 bar
2 baz
*/

попробуйте так (не проверяла)
Код: sql
1.
2.
SELECT JSON_EXTRACT(JSON_EXTRACT(JSON_EXTRACT(JsonValue,'$.Header'), fullkey), '$.ArrayElement') AS arr_splitted
FROM TestTable, json_each(TestTable.JsonValue)


vdix

и объяденить их с другими колонками строки

вероятно, json() function или json_array() function в зависимости от задачи
...
Рейтинг: 0 / 0
sqlite json1 разбить элементы array на строки выборки
    #40034356
JeyCi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторuse json_tree() to make a temp table of all the properties for all documents
The problem json_tree makes one record for each property, which may be a volume problem.
...
Рейтинг: 0 / 0
sqlite json1 разбить элементы array на строки выборки
    #40034550
JeyCi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JeyCi

попробуйте так (не проверяла)

проверила - поправила
Код: sql
1.
2.
SELECT JSON_EXTRACT(JSON_EXTRACT(JSON_EXTRACT(JsonValue,'$.Header'), fullkey), '$.ArrayElement')  AS ArrayElement
  FROM TestTable,  json_each(JSON_EXTRACT(TestTable.JsonValue,'$.Header'))


-- это и хотела сказать, что json_each и json_tree -- табличные функции - применяются в FROM, а есть т.н. строковые функции, которые применяются на значения полей в SELECT...
используйте правильно
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / sqlite json1 разбить элементы array на строки выборки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (10): Анонимы (7), Bing Bot, Yandex Bot 1 мин., Google Bot 2 мин.
x
x
Закрыть


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