2017-04-15 91 views
0

我正嘗試構建一個json文檔作爲後主體請求傳遞給api。使用python集合模塊創建json子對象

我將數據從一個mssql作爲一個arrray列表提取,然後使用集合模型創建一個有序字典。需要幫助有關如何創建子對象

import json, collections 

rowarray_list = [] 

for row in rows: 
    t = (row.NameLine1, row.NameLine2, row.Phone, row.Mobile, 
     row.Fax, row.Slogan, row.Address, row.City, row.State, row.Zip, 
     row.Email, row.WebSite, row.ApplyOnline, 
     row.Preflight, row.Facebook, row.LinkedIn, row.Username) 
    rowarray_list.append(t) 

objects_list = [] 
for row in rows: 
    d = collections.OrderedDict() 
    d['Name'] = row.NameLine1 
    d['Phone'] = row.Phone 
    d['Mobile'] = row.Mobile 
    d['Fax'] = row.Fax 
    d['Slogan']=row.Slogan 
    d['Address']=row.Address 
    d['City'] = row.City 
    d['State'] = row.State 
    d['Zip'] = row.Zip 
    d['Email']=row.Email 
    d['Website']=row.WebSite 
    d['ApplyOnline']=row.ApplyOnline 
    d['Preflight']=row.Preflight 
    d['Facebook']=row.Facebook 
    d['LinkedIn']=row.LinkedIn 
    d['Username']=row.Username 
    objects_list.append(d) 

json.dumps(objects_list) 

我想有JSON對象要建這樣的:

{"type": "task1", 
"body": {"Name": row.NameLine 
      "Phone": row.Phone 
      ... }} 

我似乎無法弄清楚如何做到這一點

+0

你'json'格式只允許一個單一的''body' dict',沒有列表中,您不能發送多個'row's。你能修好你的縮進嗎?什麼是'rowarray_list'? – AChampion

+0

對於python和一般的編程來說還是一點點新東西,所以請原諒我的無知。我遵循這裏使用的一些邏輯http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/。 「rowarray_list構建元組列表,每個數據庫中的每一行都變成一個元組」 –

+0

我使用了棉花糖庫並創建了類來爲每條記錄構建字典和嵌套字典對象。我將結果添加到列表中,然後使用json.dumps根據我創建的字典列表構建出json。 –

回答

0

我通過使用不同的方法能夠解決這個問題。爲每行創建一個字典對象並將其附加到字典列表中。然後使用JSON庫,創建完整的JSON對象

rowarray_list=[]  
for row in rows: 
     subdt = dict(Name=row.NameLine1, Title=row.NameLine2, Phone=row.Phone, Mobile=row.Mobile, 
      Fax=row.Fax, Slogan=row.Slogan, Address=row.Address, City=row.City, State=row.State, Zip=row.Zip, Email=row.Email, WebSite=row.WebSite, ApplyOnline=row.ApplyOnline, 
      Preflight=row.Preflight, Facebook=row.Facebook, LinkedIn=row.LinkedIn, Username=row.Username) 
     dt=dict(action='fetchView', body=subdt) 
     rowarray_list.append(dt) 

print(json.dumps(rowarray_list)) 
cursor.close()