2013-10-15 83 views
1

通过一个HTTP POST我获得网络资源的一些统计数据:使用httplib2的处理字符串到字典,反之亦然

resp, content = http.request(statistics_url, 
      method='POST', 
      headers={'Content-Type': 'application/json', 'charset':'UTF-8','Connection':'keep-alive','Host':'theHost'}, 
      body=json_body) 

的“resp”显示,我收到回“{'content-type': 'application/json; charset=UTF-8'...

检查类型所述content obj的:type(content)返回str

content对象的格式是:

{ 
    "key" : "string value" 
    ............ 
    "key" : int value 
} 

因为我想我变成一个JSON对象一些其他的数据以扩大此,追加到它,我需要的数据,然后再次尝试做一个串出来的(因为我需要进一步传递)

jdata = json.loads(s) 
jdata['ip_address']="some ip address" 

v1 = json.dumps(jdata) 
v2 = ast.literal_eval(json.dumps(jdata)) 
v3 = ast.literal_eval(pprint.pformat(jdata) 

没有v1,v2,v3以与原始格式相同的格式返回字典。我获得 格式,如{'key' : 'value'} or {u'key' : u'value'},这会导致不希望的结果,然后将此信息传递给其他实体。

问题是如何获得与上述相同的格式?

+0

“新”格式与“旧”格式有何不同? –

+0

包装的键/值对的字符是'而不是'。这似乎不适合我。 –

+0

那么为什么不重新编码为JSON? –

回答

0

您可以将indent命名参数设置为数字以获得漂亮的打印结果。 v1版本是要走的路线:

import json 

s = """ 
{ 
    "key1": "value1", 
    "key2": 5 
} 
""" 

jdata = json.loads(s) 
jdata['ip_address']="1.2.3.4" 

v1 = json.dumps(jdata, indent=2) 
print(v1) 

""" Prints 
{ 
    "key1": "value1", 
    "key2": 5, 
    "ip_address": "1.2.3.4" 
} 
""" 
相关问题