2017-02-28 91 views
0

我通過套接字接收數據是字典的數據,但是當它通過套接字發送時,它必須是Json字符串,所以當我收到它時,我需要將其重新轉回字典。如何將Json字符串轉換爲字典? 我試圖做負載,如newdata = json.loads(data),但它並沒有把它背字典python:將json字符串轉換成字典

data = connection.recv(4096) 
    if data: 
     print "Received", repr(data) 

     data = data.rstrip() 
     connection.send("%s\n%s\n%s\n" % ("-" * 80, data.center(80), "-" * 80)) 
     print "Response sent!" 
     newdata = json.loads(data) 
     for k, v in newdata.iteritems(): 
      AllData[v] = k 

NewData看起來是這樣的:{u'1009.2': [1, 1], u'1018.2': [0, 0]} 但環對待newdata爲字符串。

+0

,而不是'ALLDATA [ v] = k'嘗試打印值'k'和'​​v'來驗證它是否工作。 –

回答

0

您的字符串包含無效的JSON數據。字符串文字前不得有u,並且它們必須包含在雙引號中。

問題可能是由於發件人使用str(d)來序列化字典造成的。如果你能控制的發送者,讓它使用json.dumps(d)序列化:

d = {'1018.2': [0, 0], '1009.2': [1, 1]} 
data = str(d) 
# "{'1018.2': [0, 0], '1009.2': [1, 1]}" - bad! 
data = json.dumps(d) 
# '{"1018.2": [0, 0], "1009.2": [1, 1]}' - good! 

如果你無法控制的發送者,你可以反序列化,你有ast.literal_eval(data)獲取數據:

d = ast.literal_eval(data) 
# {'1018.2': [0, 0], '1009.2': [1, 1]}