I am working on a nested JSON data which I need to load into SQL SERVER 2012. The nested JSON contains two roots i.e. one column and another rows. I need to put value from row into the column. Please see the structure as below:
{ "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, ] ] } ] }
Result:
timestamp id name url duration 2019-04-08 244 Internal https://google.com 1245
Here , in sql server it should take column names from columns and value for each column from rows
Advertisement
Answer
assuming that you store the json into a file named 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)
Output for create table:
CREATE TABLE PrimaryResult ( timestamp datetime, id string, name string, url string, duration real );
Output for insert into table:
INSERT INTO PrimaryResult (timestamp, id, name, url, duration) VALUES (2019-04-08T13:09:52.871Z, 244, Internal, https://google.com, 1245);