2015-06-01 54 views
0

我正在从想要发送到Web服务的SQL服务器数据库中检索数据。服务器预期如下所述的某种格式的JSON。我的输出现在不会显示,我希望它和服务器不能使用它。如何添加下面指定的密钥?我正在使用Python 2.6.7。将多个键分配给JSON

{ 
    "MetaData": {}, 
    "SRData": { 
     "AddressVerified": "Y", 
     "SRNumber": "1-16774241", 
     "SRType": "Electronic Waste" 
    } 
} 

代码:

import pyodbc 
    import json 
    import collections 
    import requests 

     connstr = 'DRIVER={SQL Server};SERVER=url;DATABASE=ServiceRequest; UID=SA;PWD=pwd' 
     conn = pyodbc.connect(connstr) 
     cursor = conn.cursor() 

     cursor.execute(""" 
        SELECT SRNUMBER, FirstName, LastName, ParentNumber 
     FROM MYLA311 """) 

     rows = cursor.fetchall() 

metadata = '{ "MetaData": {},"SRData":' 

    objects_list = [] 
    for row in rows: 
     d = collections.OrderedDict() 
     d['SRNUMBER']= row.SRNUMBER 
     d['FirstName']= row.FirstName 
     d['LastName']= row.LastName 
     d['ParentNumber']= row.ParentNumber 


    objects_list.append(d) 

    output = { 
    metadata: objects_list 

     j = json.dumps(output) 
     objects_file = 'C:\Users\Administrator\Desktop\JSONOutput.txt' 
     f = open(objects_file,'w') 



     url = "https://posttestserver.com/post.php" 
     data = j 
     headers = {'Content-type': 'text/plain', 'Accept': '/'} 
     r = requests.post(url, data= json.dumps(output), headers=headers, verify=False) 
     conn.close() 

电流输出:

{ 
    "{ \"MetaData\": {},\"SRData\":": [ 
     { 
      "FirstName": "MyLAG", 
      "LastName": "ThreeEleven", 
      "ParentNumber": "021720151654176723", 
      "SRNUMBER": "1-3580171" 
     } 
    ] 
} 
+0

您可能需要使用您正在使用的Python服务器框架标记问题。 (我不是偶然识别它) – Katana314

+0

你的代码非常破碎。我试图解决它,但这会包括很多猜测。请自己修复它。 – poke

+0

你能解释一下它是怎么破的?它工作正常。 – geoffreyGIS

回答

0

第一你逝去的文本在这一行:

metadata = '{ "MetaData": {},"SRData":' 

记得json.dumps使Python字典到JSON所以忘了单引号

metadata = { "MetaData": {},"SRData": 

然后objects_list是一个数组,所以它会把支架[],如果你需要得到很多行,那么它的好,但在你的第一个JSON布局没有阵列,只是把d = collections.OrderedDict()SRDATA:

1

你接近这个问题的错误的方式。您认为您需要做的是在两者之间插入JSON语法以获得最终结果,但是您需要做的是获取要序列化的对象(格式为JSON)以反映您要输出的JSON结构。

换句话说,如果你有dict具有完全相同的结构,你的JSON,你设置:

import json 
json.dumps(
    {"MetaData": {}, 
    "SRData": {"AddressVerified": "Y", 
      "SRNumber": "1-16774241", 
      "SRType": "Electronic Waste"}}) 

我会离开使这个动态的给你:)

+0

我很想念这里的东西;我基本上需要用'{“MetaData”:{}, “SRData”包装我的输出结果:'你是否在暗示我的输入字典和输出JSON是相同的,并且用json.dumps' {“MetaData”:{ }, “SRData”:'?如果我可以简单地追加这一点,那将解决我的问题。 – geoffreyGIS

+0

这就是我所建议的。方便的事实是,Python和JSON对Python称为“字典”和JSON称为“对象字面量”的语法具有相同的语法。但不要让这种欺骗你,这只是偶然的(如果不是历史相关的话)。 –