python 如何将bytes类型转换为dictionary [duplicate]

gr8qqesn  于 2023-09-29  发布在  Python
关注(0)|答案(5)|浏览(146)

此问题已在此处有答案

Convert a String representation of a Dictionary to a dictionary(12个回答)
去年就关门了。
这篇文章是编辑并提交审查8小时前.
我有一个bytes类型的对象,如下所示:

b"{'one': 1, 'two': 2}"

我需要使用Python代码从上面的字节类型对象中获取适当的Python字典。

string = b"{'one': 1, 'two': 2}"
d = dict(toks.split(":") for toks in string.split(",") if toks)

但是我得到了下面的错误:

------> d = dict(toks.split(":") for toks in string.split(",") if toks)
TypeError: 'bytes' object is not callable
j2datikz

j2datikz1#

我认为解码也是需要得到一个适当的口述。

a= b"{'one': 1, 'two': 2}"
ast.literal_eval(a.decode('utf-8'))
**Output:** {'one': 1, 'two': 2}

公认的答案是

a= b"{'one': 1, 'two': 2}"
ast.literal_eval(repr(a))
**output:**  b"{'one': 1, 'two': 2}"

literal_eval在我的许多代码中都没有正确地完成这一任务,所以我个人更喜欢使用json模块来完成这一任务。

import json
a= b"{'one': 1, 'two': 2}"
json.loads(a.decode('utf-8'))
**Output:** {'one': 1, 'two': 2}
u0sqgete

u0sqgete2#

你只需要ast.literal_eval。没有比这更好的了。没有理由乱用JSON,除非你在你的字符串中使用非Python的dict语法。

# python3
import ast
byte_str = b"{'one': 1, 'two': 2}"
dict_str = byte_str.decode("UTF-8")
mydata = ast.literal_eval(dict_str)
print(repr(mydata))

答案here它还详细说明了ast.literal_eval如何比eval更安全。

3zwtqj6y

3zwtqj6y3#

你可以这样尝试:

import json
import ast

a= b"{'one': 1, 'two': 2}"
print(json.loads(a.decode("utf-8").replace("'",'"')))

print(ast.literal_eval(a.decode("utf-8")))

有模块的文档:

  1. ast doc
  2. json doc
hjzp0vay

hjzp0vay4#

您可以使用Base64库将字符串字典转换为字节,尽管您可以使用json库将字节结果转换为字典。试试下面的示例代码。

import base64
import json

input_dict = {'var1' : 0, 'var2' : 'some string', 'var1' : ['listitem1','listitem2',5]}

message = str(input_dict)
ascii_message = message.encode('ascii')
output_byte = base64.b64encode(ascii_message)

msg_bytes = base64.b64decode(output_byte)
ascii_msg = msg_bytes.decode('ascii')
# Json library convert stirng dictionary to real dictionary type.
# Double quotes is standard format for json
ascii_msg = ascii_msg.replace("'", "\"")
output_dict = json.loads(ascii_msg) # convert string dictionary to dict format

# Show the input and output
print("input_dict:", input_dict, type(input_dict))
print()
print("base64:", output_byte, type(output_byte))
print()
print("output_dict:", output_dict, type(output_dict))

mkh04yzy

mkh04yzy5#

简单

data = eval(b"{'one': 1, 'two': 2}")

相关问题