У меня есть столбец SQL типа JSON в таблице SQL, как показано ниже. Я хочу, чтобы приведенный ниже код был преобразован в отдельные столбцы, такие как лекарства в качестве имени таблицы и другой атрибут в качестве имени столбца, как я могу использовать adf или любые другие средства, пожалуйста, объясните. Приведенный ниже код представляет собой один столбец в таблице с именем report, где мне нужно преобразовать его в отдельные столбцы.
{
"drugs": {
"Codeine": {
"bin": "Y",
"name": "Codeine",
"icons": [
93,
103
],
"drug_id": 36,
"pathway": {
"code": "prodrug",
"text": "is **inactive**, its metabolites are active."
},
"targets": [],
"rxnorm_id": "2670",
"priclasses": [
"Analgesic/Anesthesiology"
],
"references": [
1,
16,
17,
100
],
"subclasses": [
"Analgesic agent",
"Antitussive agent",
"Opioid agonist",
"Phenanthrene "
],
"metabolizers": [
"CYP2D6"
],
"phenotype_ids": {
"metabolic": "5"
},
"relevant_genes": [
"CYP2D6"
],
"dosing_guidelines": [
{
"text": "Reduced morphine formation. Use label recommended age- or weight-specific dosing. If no response, consider alternative analgesics such as morphine or a non-opioid.",
"source": "CPIC",
"guidelines_id": 1
},
{
"text": "Analgesia: select alternative drug (e.g., acetaminophen, NSAID, morphine-not tramadol or oxycodone) or be alert to symptoms of insufficient pain relief.",
"source": "DPWG",
"guidelines_id": 362
}
],
"drug_report_notes": [
{
"text": "Predicted codeine metabolism is reduced.",
"icons_id": 58,
"sort_key": 58,
"references_id": null
},
{
"text": "Genotype suggests a possible decrease in exposure to the active metabolite(s) of codeine.",
"icons_id": 93,
"sort_key": 56,
"references_id": null
},
{
"text": "Professional guidelines exist for the use of codeine in patients with this genotype and/or phenotype.",
"icons_id": 103,
"sort_key": 50,
"references_id": null
}
]
}
Вы хотите создать из него таблицу. Но какова ожидаемая схема вывода этой таблицы?
например: Table_Name (лекарства) и столбцы, как показано ниже Кодеин, bin, имя, значки,drug_id, pathway, code, text, target, rxnorm_id priclasses, metabolizers,phenotype_ids, relevant_genes, dosing_guidelines, text as string, source as string,guidelines_id as строка,текст как строка,источник как строка,guidelines_id как строка,drug_report_no как строка,текст как строка,строка icons_idas, sort_key как строка,references_id как строка,текст как строка,icons_id как
Судя по количеству многозначных элементов в JSON, вам может потребоваться разработать около дюжины различных таблиц плюс отношения внешнего ключа, чтобы сделать это правильно.
Поскольку этот json уже находится в столбце SQL, вам не нужен ADF, чтобы разбить его на части. Для этого вы можете использовать функции JSON на сервере SQL.
пример нескольких первых столбцов:
declare @json varchar(max) = '{
"drugs": {
"Codeine": {
"bin": "Y",
"name": "Codeine",
"icons": [
93,
103
],
"drug_id": 36,
"pathway": {
"code": "prodrug",
"text": "is **inactive**, its metabolites are active."
},
"targets": [],
"rxnorm_id": "2670",
"priclasses": [
"Analgesic/Anesthesiology"
],
"references": [
1,
16,
17,
100
],
"subclasses": [
"Analgesic agent",
"Antitussive agent",
"Opioid agonist",
"Phenanthrene "
],
"metabolizers": [
"CYP2D6"
],
"phenotype_ids": {
"metabolic": "5"
},
"relevant_genes": [
"CYP2D6"
],
"dosing_guidelines": [
{
"text": "Reduced morphine formation. Use label recommended age- or weight-specific dosing. If no response, consider alternative analgesics such as morphine or a non-opioid.",
"source": "CPIC",
"guidelines_id": 1
},
{
"text": "Analgesia: select alternative drug (e.g., acetaminophen, NSAID, morphine-not tramadol or oxycodone) or be alert to symptoms of insufficient pain relief.",
"source": "DPWG",
"guidelines_id": 362
}
],
"drug_report_notes": [
{
"text": "Predicted codeine metabolism is reduced.",
"icons_id": 58,
"sort_key": 58,
"references_id": null
},
{
"text": "Genotype suggests a possible decrease in exposure to the active metabolite(s) of codeine.",
"icons_id": 93,
"sort_key": 56,
"references_id": null
},
{
"text": "Professional guidelines exist for the use of codeine in patients with this genotype and/or phenotype.",
"icons_id": 103,
"sort_key": 50,
"references_id": null
}
]
}
}
}
select JSON_VALUE(JSON_QUERY(@json,'$.drugs.Codeine'),'$.bin') as bin,
JSON_VALUE(JSON_QUERY(@json,'$.drugs.Codeine'),'$.name') as name,
JSON_VALUE(JSON_QUERY(@json,'$.drugs.Codeine'),'$.drug_id') as drug_id,
JSON_VALUE(JSON_QUERY(@json,'$.drugs.Codeine'),'$.icons[0]') as icon_1
'
Вам нужно решить, как обращаться с массивами, такими как значки, в которых есть несколько значений внутри одного и того же элемента.
Использованная литература:
спасибо Чен, как мы можем воспроизвести то же самое для других данных, так как когда я запускаю это, я вижу только одну запись. Как мы можем расширить это, чтобы показать все данные
используйте что-то вроде этого: выберите JSON_VALUE(JSON_QUERY(json_column,'$.drugs.Codeine'),'$.bin') as bin из table_with_json, где table_with_json — это имя вашей таблицы, а json_column — это имя столбец в таблице, содержащий json
Можете ли вы также предоставить ожидаемый результат для данного образца