2016-01-31 122 views
0

我正在嘗試使api調用哪些具有json值作爲其中一個鍵。由於內部json形成了額外的雙引號,這是失敗的。Python JSON嵌套鍵值對解析

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

該變量的值是從網頁傳遞的json。在可變

樣本數據將是這樣的: -

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

現在,當我試圖形成我的有效載荷在後電話被髮送,

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

現在被添加這個「變量」有效載荷被視爲字符串,並用雙引號追加,像這樣: -

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

但我想它到b e像這樣: -

{'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()) 

回答

1

當你從它不僅僅是「治療」作爲一個字符串請求得到variable ......是一個串。

所以,你需要:

json.loads(variable) 

將它添加到稍後序列化JSON的字典之前。

​​
+0

這並不能解決問題。仍然雙引號添加在最終的有效載荷! – learner

+0

你確定你在做'加載'而不是'轉儲'嗎?如果你打印'request.GET.get('name','{}')'你看到了什麼?最終的有效載荷是什麼樣的? ...另外,JSON使用雙引號而不是單引號字符串 – Anentropic

+0

是的,我正在使用加載,它給了我這個錯誤: - ValueError:期望在雙引號括起來的屬性名稱:第1行第2列(char 1) 但是,如果我在該字符串的開始和結尾處添加「{」和「}」,它允許我加載它,但又不能解決問題。 – learner

0

你想必已經傾倒variable到一個JSON字符串。 不要那樣做;把它作爲一個字典,然後把所有的東西一次性倒掉。

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) 
0

我想在這裏指出幾件事情。

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

這不是一個有效的json字符串。

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

這是一個有效的json字符串。

因此,首先在將此變量附加到有效載荷字典之前,您需要將它轉換爲像這樣的python字典。

variable = json.loads(variable) 

這將創建類似這樣的變量。

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

現在你可以繼續並將其添加到你的有效載荷字典中,並繼續你正在做的事情。