How to load complex JSON data into SQL Server table where there are multiple tables

82 Views Asked by At

This is my JSON data:

[
  {
     "meta": {
        "disclaimer": "Data downloaded for practice",
        "terms": "https://open.fda.gov/terms/",
        "license": "https://open.fda.gov/license/",
        "last_updated": "2023-11-25",
        "results": {
           "skip": 0,
           "limit": 20000,
           "total": 218047
        }
     },
     "results": [
        {
           "spl_product_data_elements": [
              "Some Data"
           ],
           "boxed_warning": [
              "Some Data"
           ],
           "indications_and_usage": [
              "Some Data"
           ],
           "dosage_and_administration": [
              "Some Data"
           ],
           "dosage_and_administration_table": [
              "Some Data",
              "Some Data"
           ],
           "dosage_forms_and_strengths": [
              "Some Data"
           ],
           "contraindications": [
              "Some Data"
           ],
           "warnings_and_cautions": [
              "Some Data"
           ],
           "adverse_reactions": [
              "Some Data"
           ],
           "adverse_reactions_table": [
              "Some Data"
           ],
           "drug_interactions": [
              "dkam"
           ],
           "drug_interactions_table": [
              "Something"
           ],
           "use_in_specific_populations": [
              "mda"
           ],
           "pregnancy": [
              "kmda"
           ],
           "pediatric_use": [
              "da"
           ],
           "geriatric_use": [
              "mdam"
           ],
           "overdosage": [
              "kmdma"
           ],
           "description": [
              "oimda"
           ],
           "clinical_pharmacology": [
              "jndaj"
           ],
           "clinical_pharmacology_table": [
              "mkkmld"
           ],
           "mechanism_of_action": [
              "djam"
           ],
           "pharmacokinetics": [
              "jomda"
           ],
           "pharmacokinetics_table": [
              "jmkda"
           ],
           "nonclinical_toxicology": [
              "okmda"
           ],
           "carcinogenesis_and_mutagenesis_and_impairment_of_fertility": [
              "dakm"
           ],
           "animal_pharmacology_and_or_toxicology": [
              "kk"
           ],
           "clinical_studies": [
              "dja"
           ],
           "clinical_studies_table": [
              "dko",
              "ajsd"
           ],
           "how_supplied": [
              "dmo"
           ],
           "how_supplied_table": [
              "dak"
           ],
           "storage_and_handling": [
              "dioda"
           ],
           "information_for_patients": [
              "dajd"
           ],
           "spl_unclassified_section": [
              "image.jpg"
           ],
           "spl_medguide": [
              "djda"
           ],
           "spl_medguide_table": [
              "some"
           ],
           "package_label_principal_display_panel": [
              "fasghj fdg",
              "fadsbg ffd"
           ],
           "set_id": "a7701e8c-4e16-4165-8b83-de2c08d5ded3",
           "id": "cf4a35ba-0266-4b37-99a4-2c855c519cb1",
           "effective_time": 20230815,
           "version": 18,
           "openfda": {
              "application_number": [
                 "NDA020607"
              ],
              "brand_name": [
                 "dad"
              ],
              "generic_name": [
                 "dasd"
              ],
              "manufacturer_name": [
                 "Greenstone LLC"
              ],
              "product_ndc": [
                 "59762-0028",
                 "59762-0029"
              ],
              "product_type": [
                 "HUMAN PRESCRIPTION DRUG"
              ],
              "route": [
                 "ORAL"
              ],
              "substance_name": [
                 "DICLOFENAC SODIUM",
                 "MISOPROSTOL"
              ],
              "rxcui": [
                 857706,
                 1359105
              ],
              "spl_id": [
                 "cf4a35ba-0266-4b37-99a4-2c855c519cb1"
              ],
              "spl_set_id": [
                 "a7701e8c-4e16-4165-8b83-de2c08d5ded3"
              ],
              "package_ndc": [
                 "59762-0028-1",
                 "59762-0028-2",
                 "59762-0029-1"
              ],
              "is_original_packager": [
                 true
              ],
              "upc": [
                 359762002914,
                 359762002815
              ],
              "nui": [
                 "N0000175785",
                 "M0017811"
              ],
              "pharm_class_epc": [
                 "dajn"
              ],
              "pharm_class_cs": [
                 "ioa"
              ],
              "unii": [
                 "0E43V0BB57",
                 "QTG126297Q"
              ]
           }
        }
     ]
  }
]

From this, I am trying to load data into three tables named Meta, Results, ResultOpenfda where Meta is formed from "meta", Result from "results", ResultOpenfda from the "openfda" which is inside the "results".

DECLARE @JSON Nvarchar(MAX);

SELECT @JSON = BulkColumn 
FROM OPENROWSET(BULK 'D:\DrugLabel\Drugs.json', SINGLE_CLOB) AS json;

--Results table
IF (ISJSON(@JSON) = 1)
BEGIN
    PRINT 'File is valid';

INSERT INTO Results (
    [spl_product_data_elements],
    [boxed_warning],
    --all other columns
)
SELECT 
    JSON_VALUE(@JSON, '$.results[0].spl_product_data_elements'),
    JSON_VALUE(@JSON, '$.results[0].boxed_warning'),
    --all other json_values
END
ELSE
BEGIN
    PRINT 'File is invalid';
END

--ResultOpenfda

IF (ISJSON(@JSON) = 1)
BEGIN
    PRINT 'File is valid';

INSERT INTO ResultOpenfda (
    [application_number],
    [brand_name],
    --all other columns
)
SELECT 
    JSON_VALUE(@JSON, '$.results[0].openfda[0].application_number'),
    JSON_VALUE(@JSON, '$.results[0].openfda[0].brand_name'),
    --all other json_values
END
ELSE
BEGIN
    PRINT 'File is invalid';
END

Even though I have already created tables for these still I am getting error of column number not matching.

Can you give any solution for this so that, I can move forward with this?

I have searched everywhere but there are solutions for simple JSON and not nested key value JSON.

0

There are 0 best solutions below