Python JSON嵌套键值对解析

时间:2016-01-31 16:06:40

标签: python json django post

我正在尝试进行api调用,其中json作为其中一个键的值。它失败了,因为内部json形成了额外的双引号。

variable = request.GET.get('name', '{}')

该变量值是从网页传递的json。

变量中的示例数据将类似于: -

variable= {'name': 'ABC', 'Id': '1'}

现在,当我尝试在后期通话中形成我的有效负载时,

payload = {
        'var1': var1,
        'variable': variable,
    }

现在添加到有效负载的这个“变量”被视为String并附加双引号,如下所示: -

{'var1': '130', 'variable': "{'name': 'ABC', 'Id': '1'}"}

但我希望它是这样的: -

{'var1': '130', 'variable': {'name': 'ABC', 'Id': '1'}}

有关如何使其成为可能的任何建议吗?

这是用数据进行后调用的代码: -

r = requests.post("URL",data= json.dumps(payload),headers={'Authorization': obj.header, 'Content-type': 'application/json'}, proxies=getProxyDict())

4 个答案:

答案 0 :(得分:1)

当您从请求中获得variable时,它不仅仅被“视为”字符串... 是一个字符串。

所以你需要:

json.loads(variable)

之后将其添加到dict中,然后将其序列化为json。

variable = json.loads(request.GET.get('name', '{}'))
payload = {
    'var1': var1,
    'variable': variable,
}
r = requests.post("URL",data= json.dumps(payload),headers={'Authorization': obj.header, 'Content-type': 'application/json'}, proxies=getProxyDict())

答案 1 :(得分:0)

您可能已将variable转储到JSON字符串。 不要那样做;把它作为一个字典,并将所有东西一次性抛弃。

答案 2 :(得分:0)

import json

variable = {'name': 'ABC', 'Id': '1'}

payload = {
    'var1': 'foo',
    'variable': variable,
}

print json.dumps(payload, indent=4)

结果

{
    "variable": {
        "name": "ABC", 
        "Id": "1"
    }, 
    "var1": "foo"
}

这是完美的json。但是,您可能需要根据您正在与之交谈的API设置标头。

request = requests.get('myurl', headers={'accept': 'application/json'})
json_data = request.json()
# manipulate json_data
request = requests.post('myurl', headers={'content-type': 'application/json'}, json=json_data)

答案 3 :(得分:0)

我想在此处指出几点。

variable= "{'name': 'ABC', 'Id': '1'}"

这不是有效的json字符串。

variable= '{"name": "ABC", "Id": "1"}'

这是一个有效的json字符串。

首先在将此变量附加到有效负载dict之前,您需要将其转换为这样的python dict。

variable = json.loads(variable)

这将创建类似这样的变量。

{u'name': u'ABC', u'Id': u'1'}

现在您可以继续将此添加到您的有效负载字典中并继续您正在做的事情。