Python:将字典转换为字节

时间:2019-03-21 09:38:30

标签: python dictionary

我正在尝试将字典转换为字节,但是在将其转换为正确格式时遇到问题。

首先,我正在尝试使用自定义架构映射字典。架构定义如下-

class User:
    def __init__(self, name=None, code=None):
        self.name = name
        self.code = code

class UserSchema:
    name = fields.Str()
    code = fields.Str()

@post_load
 def create_userself, data):
    return User(**data)

我的字典结构如下-

user_dict = {'name': 'dinesh', 'code': 'dr-01'} 

我正在尝试使用以下代码将字典映射到用户架构

schema = UserSchema(partial=True)
user = schema.loads(user_dict).data

在执行操作时, schema.loads 期望输入为str,字节或字节数组。以下是我将字典转换为字节的步骤

import json
user_encode_data = json.dumps(user_dict).encode('utf-8')
print(user_encode_data)

输出:

b'{"name ": "dinesh", "code ": "dr-01"}

如果我尝试使用架构进行映射,则无法获得所需的架构对象。但是,如果我具有下面给出的格式的输出,则可以获取正确的模式对象。

b'{\n  "name": "dinesh",\n  "code": "dr-01"}\n'

任何建议如何将字典转换为字节?

2 个答案:

答案 0 :(得分:2)

您可以在indent中使用json.dumps()选项来获得\n个符号:

import json

user_dict = {'name': 'dinesh', 'code': 'dr-01'}
user_encode_data = json.dumps(user_dict, indent=2).encode('utf-8')
print(user_encode_data)

输出:

b'{\n  "name": "dinesh",\n  "code": "dr-01"\n}'

答案 1 :(得分:2)

您可以使用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))

enter image description here