Есть ли какой-либо способ вставить нижеприведенные вложенные данные json в sql server

#sql #json #sql-server #ssis #ssis-2012

#sql #json #sql-сервер #ssis #ssis-2012

Вопрос:

Я работаю над вложенными данными JSON, которые мне нужно загрузить в SQL SERVER 2012. Вложенный JSON содержит два корня, то есть один столбец и другие строки. Мне нужно поместить значение из строки в столбец. Пожалуйста, смотрите структуру, как показано ниже:

 {
    "tables": [
        {
            "name": "PrimaryResult",
            "columns": [
                {
                    "name": "timestamp",
                    "type": "datetime"
                },
                {
                    "name": "id",
                    "type": "string"
                },
                {
                    "name": "name",
                    "type": "string"
                },
                {
                    "name": "url",
                    "type": "string"
                },
                {
                    "name": "duration",
                    "type": "real"
                }
            ],
            "rows": [
                [
                    "2019-04-08T13:09:52.871Z",
                    "244",
                    "Internal",
                    "https://google.com",
                    1245,

                ]
            ]
        }
    ]
}
  

Результат:

 timestamp    id    name    url    duration
2019-04-08    244    Internal    https://google.com    1245
  

Здесь, в sql Server, он должен принимать имена столбцов из столбцов и значение для каждого столбца из строк

Комментарии:

1. Это сложная проблема, но некоторое время назад Фил Фактор поделился некоторыми решениями. red-gate.com/simple-talk/sql/t-sql-programming /…

2. Да, Luis, это немного сложный сценарий, в котором на самом деле значения не определены в значении ключа, вместо этого они обрабатываются как массив.

Ответ №1:

предполагая, что вы сохраняете json в файл с именем json.txt

 import json

with open('json.txt') as f:
    data = json.load(f)
    tableName = data['tables'][0]["name"]
    sqlCreateTable = 'CREATE TABLE '   tableName   ' (n'
    sqlInsertInto = 'INSERT INTO '   tableName   ' ('
    for i in range(0,len(data['tables'][0]['columns'])):
        columnName = data['tables'][0]['columns'][i]['name']
        type = data['tables'][0]['columns'][i]['type']
        sqlCreateTable  = columnName   " "   type   ',n'
        sqlInsertInto  = columnName   ', '

    sqlCreateTable = sqlCreateTable[:-2]   'n);'
    sqlInsertInto = sqlInsertInto[:-2]   ')nVALUES ('

    for value in data['tables'][0]['rows'][0]:
        sqlInsertInto  = str(value)   ', '

    sqlInsertInto = sqlInsertInto[:-2]   ');'

    print(sqlCreateTable)
    print(sqlInsertInto)
  

Вывод для создания таблицы:

 CREATE TABLE PrimaryResult (
timestamp datetime,
id string,
name string,
url string,
duration real
);
  

Вывод для вставки в таблицу:

 INSERT INTO PrimaryResult (timestamp, id, name, url, duration)
VALUES (2019-04-08T13:09:52.871Z, 244, Internal, https://google.com, 1245);
  

Комментарии:

1. Спасибо Cristian Iacob за ваше решение. На самом деле для его выполнения потребовалось немного времени, но да, наконец, получен результат с использованием приведенного выше кода на C #. Большое спасибо за вашу помощь.