为JSON分配多个键

时间:2015-06-01 21:01:52

标签: python json

我正在从SQL服务器数据库中检索我想要发送到Web服务的数据。服务器期望以下面指定的特定格式的JSON。我的输出现在看起来并不像我想要的那样,也不能被服务器使用。如何添加下面指定的密钥?我使用的是Python 2.6.7。

   {
    "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"
        }
    ]
}

2 个答案:

答案 0 :(得分:1)

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

换句话说,如果您的 public List<ErrorGet> TypeTwoTest(TypeTwoAditionalInformation _type) { BaseClassTest(_type); .. .. if(_type.ID!=null) ... if(_type.x3!=null) ... if(_type.x4!=null) ... } 具有与JSON完全相同的结构,那么您可以设置:

dict

我会让你充满活力:)

答案 1 :(得分:0)

首先你要传递这行中的文字:

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

记住json.dumps为json创建了一个python字典,所以忘记了单引号

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

然后objects_list是一个数组,所以它会放括号[],如果你需要获得很多行,那么它可以,但是在你的第一个JSON布局中没有数组,只需要放d = collections.OrderedDict()

之后的SRDATA: