2017-02-28 89 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]}