Ниже приведен большой двоичный объект json, который у меня есть в моей базе данных.
{
RootData: {
202003: {
201903: {
"abc": 123,
xyz: 456
},
data1: {
},
data2: {
}
}
}
}
Прямо сейчас у меня есть запрос, куда вытащить данные внутри узла 201903
, как показано ниже.
select blah blah,
JSON_EXTRACT(convert(columnname using utf8), '$.RootData."202003"."201903".abc') as blah
В приведенном выше запросе мой вопрос вращается вокруг части '$.RootData."202003"."201903".abc'
Я НЕ хочу жестко кодировать часть 201903
и ищу синтаксис, в котором он может выбирать узел с помощью подстановочных знаков.
Я пробовал следующие варианты без везения
'$.RootData."202003"."20*".abc'
'$.RootData."202003".[1].abc'
'$.RootData."202003".$.20*.abc'
Не работает, так как это неправильный синтаксис, я думаю. Ищем правильный синтаксис. 20 всегда является началом этого ключа, мы можем положиться на это. И это первый ключ всегда.
Вы можете использовать путь как '$.RootData."202003"**.abc'
. Результат будет в виде массива. Обратитесь - db-fiddle.com/f/6g4qiekAU4i3J8iRoAZiCA/0
Если вам нужен результат в виде отдельных значений, может быть другая выдержка из результата как -db-fiddle.com/f/6g4qiekAU4i3J8iRoAZiCA/1
@Prasanna Большое спасибо, что изучили это. Это работает. Однако, когда я сказал $[0], я получаю весь json обратно в набор результатов.
@SureshAtta, странно. Если быть точным, есть 2 JSON_EXTRACT. Внутренний будет использовать **, а внешний - '$[0]'. Можете ли вы воспроизвести проблему в db-fiddle.com/f/6g4qiekAU4i3J8iRoAZiCA/1?
@Prasanna Мой плохой. Не заметил второй экстракт json. Попробую это. В любом случае, не могли бы вы добавить это в качестве ответа. ?
Путь в форме $.RootData."202003"**.abc
должен помочь.
Обратитесь - https://www.db-fiddle.com/f/6g4qiekAU4i3J8iRoAZiCA/0
Тип результата будет массивом. Чтобы получить результат первого совпадения, его можно вложить в другой JSON_EXTRACT
, как показано ниже.
select JSON_EXTRACT(JSON_EXTRACT(convert(data using utf8), '$.RootData."202003"**.abc'), '$[0]')
from rootdata;
Вы должны: использовать JSON_KEYS и получить все существующие ключи; проверить ключи на соответствие вашему условию/шаблону и отфильтровать несоответствующие; используйте совпадающие ключи, стройте соответствующие пути (используя общие строковые функции) и извлекайте соответствующие значения.