python:将json字符串转换为字典

时间:2017-02-28 06:27:13

标签: python json dictionary

我通过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视为一个字符串。

1 个答案:

答案 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]}