我通过socket接收数据,其中数据是字典,但是当它通过套接字发送时,它必须是Json字符串,所以当我收到它时,我需要将它转回字典。如何将Json字符串转换为字典?
我尝试做newdata = json.loads(data)
之类的加载,但它没有把它转回字典
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]}
但是for循环将newdata视为一个字符串。
答案 0 :(得分: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]}