которая хранит массив json упрощенный пример: "[{"title":"Sport"}, {"title":"Electronics"}]"
Как мне получить из неё title? Это валидный json, но в доке нет ни одного примера на работу с массивом таким. Может его можно как-то перевести в массив нормально
arrayMap, потом extractParamString или JSon чето там
Так в том-то и проблема что это не массив, а строка в которой записан массив, поэтому arrayMap не могу использовать
пример выше был с упрощением, там вложенная структура, и просто split не зайдет поэтому
по итогу в у вас просто огромная странная строка?
ну она да большая, и странная, но является валидным json
у вас не вложеная структура случаем? https://clickhouse.tech/docs/ru/sql-reference/data-types/nested-data-structures/nested/
JSONExtractRaw может это поможет?
Там динамическая структура (ну типа в некоторых строках есть в некоторых нет. Походу реально лучше всего будет переложить эту колонку сразу в массив
ну немного мал овволдных сорре, если это раковая строка какая то то по шапке надавать тому кто это делает, или попробовать raw заюзать
Raw попробовал, но проблема, что CH функции с json кажется работают только объектами json, т.е например {'a':1, 'b':2, 'c': [1, 2, 3] } но не могут, когда у нас всё завернуто в массив [{'a':1, 'b':2, 'c': [1, 2, 3] }]
но спасибо за помощь)
А в чем проблема? WITH '[{"a":1, "b":2, "c": [1, 2, 3] }]' AS x SELECT JSONExtract(x, 'Nested(a UInt32, b UInt32, c Array(UInt32))') Query id: 855df5d8-90da-4513-8dd0-fcce5558f6af ┌─JSONExtract(x, 'Nested(a UInt32, b UInt32, c Array(UInt32))')─┐ │ [(1,2,[1,2,3])] │ └───────────────────────────────────────────────────────────────┘
О, спасибо большое! Через Nested получилось, по крайней мере моя задача решается. Но опять, же, оно работает, пока фиксирован уровень вложенности
Ну а что вы хотите в случае динамики? Ну можете посмотреть на поддержку JSONPATH https://github.com/ClickHouse/ClickHouse/pull/24148
А не подойдет просто extractAll? with '[{"title":"Sport"}, {"title":"Electronics"}]' as str select extractAll(str, '"title":"([^"]*)"');
👍 Большое спасибо, что-то я затупил и не догадался через регулярку достать
select JSONExtract('[{"title":"Sport"}, {"title":"Electronics"}, {"botitle":"xxxx"}]', 'Array(Tuple(title String))').1 x; ┌─x──────────────────────────┐ │ ['Sport','Electronics',''] │ └────────────────────────────┘
Обсуждают сегодня