Найдите значение n-й пары ключей из JSON, используя запрос SQL

У меня есть показанный здесь JSON, хранящийся в столбце таблицы SQL Server:

{
  "Name": "oxygen",
  "StartDate": "2018-06-05",
  "EndDate": "2018-06-22",
  "Desc": {
    "quality": "better",
    "level,amount": "Scheduled",
    "05": "carbon",
    "GDP": "Max",
    "CDF": "ZENE 1",
    "OTBC": "REMO - MIXED UNIQUE"
  }
}

Как найти значение 5-й пары ключей с помощью запроса T-SQL?

Я пробовал это:

select JSON_QUERY(column_value,'$.Desc[5]') AS 'result' 
from table_name

select JSON_VALUE([column_value],'$.Desc[5]') as'result' 
from table_name

Ожидаемый результат "CDF": "ZENE 1".

Любая помощь приветствуется.

Вот Я сделал пример с использованием openjson, но не уверен, будет ли он сохранять заказ каждый раз, когда вы выполняете запрос.
Ergest Basha 23.04.2024 12:44
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
2
1
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не уверен, что есть простой способ, поскольку порядок ключей не является тем, что OPENJSON сообщает для объектов json, но вот одна идея:

SELECT  *
FROM    (
    SELECT  ROW_NUMBER() OVER(partition BY ID ORDER BY charindex('"' + [key] + '":', column_value)) AS sort
    ,   *
    FROM    (
        SELECT  N'{
      "Name": "oxygen",
      "StartDate": "2018-06-05",
      "EndDate": "2018-06-22",
      "Desc": {
        "quality": "better",
        "level,amount": "Scheduled",
        "05": "carbon",
        "GDP": "Max",
        "CDF": "ZENE 1",
        "OTBC": "REMO - MIXED UNIQUE"
      }
        }' AS column_value, 1 AS id
    ) x
    CROSS apply openjson(column_value, '$.Desc')
    ) x
WHERE   sort = 5

После разделения значения столбца по ключам Desc я использую ROW_NUMBER, чтобы проверить положение каждой ключевой строки внутри строки json, а затем использую ее в качестве базы для счетчика, который возвращает пятое значение.

Недостатком этого подхода является то, что он использует строковые методы, которые могут быть медленными и несколько хрупкими.

Вероятно, это первый вариант. Одна из возможных проблем — экранированный контент JSON (... "\"CDF": "Max" ...).

Zhorov 23.04.2024 13:45

Другие вопросы по теме