参数化包含JSON主体的python POST请求

时间:2014-09-19 14:40:45

标签: python json

我正在创建一个Phyton脚本来发布包含JSON BODY的请求, 这是我需要在请求正文中传递的JSON输入:

{
   "Name": "PServiceGroup125",
   "ServiceIDs": [1330,2387]
}

我能够做到这一点(它有效):

   body = "{\"Name\": \"PServiceGroup125\",\"ServiceIDs\": [1330,2387]}"
   headers = [ NVPair('Content-Type', 'application/json'), NVPair('UAMToken', uamtok) ]
   response = self.httpPost(self.hostPort, self.URI, headers, body)

我想要实现的目标:(使其更多" OO")

创建一个函数(比如createBody)来创建一个python对象,然后将这个python对象转换为JSON并在请求中传递它:

def createBody(self):
    self.serviceDataProvider.setName("PTestServiceGroup %s" % time.strftime("%d%m%H%M%S"))
    self.serviceDataProvider.setServiceIDs(self.serviceDataProvider.nextItem())

我在这里有两个问题:

在这里我设置"值"对于相应的json名称和服务ID字段,我应该如何设置名称字段(ServiceIDs)? (" ServiceIDs":[1330,2387])

假设" serviceDataProvider"已成功创建对象(使用Name和ServiceID值)。

我应该如何将此对象(serviceDataProvider)转换回JSON并在请求中传递它?

我正在看着' json'模块,但不清楚如何在这种情况下使用它

感谢任何人的帮助和建议!

# serviceDataProvider is object of class ServiceDataProvider 

class ServiceDataProvider(URLDataProvider):
    name =""
    sid=''
    sIDs=[]
    def setName(self,name):
        self.name=name

    def getName(self):
        return self.name

    def setServiceIDs(self,sid):
        sIDs=[]
        sIDs.append(sid)

    def getServiceIDs(self):
        return self.sIDs  

3 个答案:

答案 0 :(得分:1)

尝试查看json.dumps(将python字典结构转换为json字符串)和json.loadsdumps的反面)

https://docs.python.org/2/library/json.html

答案 1 :(得分:1)

这有点过度设计,并不是真的非常Pythonic:猜测,你以前的经验是用Java ...

这里并不需要任何课程,对于那些获得者/制定者来说更是如此。最好将它构建为Python字典,然后可以直接转换为JSON。

body = {}
body['Name'] = "PTestServiceGroup %s" % time.strftime("%d%m%H%M%S")
body['ServiceIds'] = [service_id1, service_id2]  # wherever these come from

data = json.dumps(body)

答案 2 :(得分:1)

Python是一种成人同意的语言,您不需要setter / getters。

如果你希望你的json处于相同的顺序,我会使用python dict或OrderedDict,因为python dicts不会保持键的插入顺序。