簡體   English   中英

Python:將字典轉換為字節

[英]Python: Convert dictionary to bytes

我正在嘗試將字典轉換為字節,但在將其轉換為正確格式時遇到問題。

首先,我試圖用自定義模式映射字典。 架構定義如下 -

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、bytes 或 bytearray。 以下是我將字典轉換為字節的步驟

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'

任何建議如何將字典轉換為字節?

您可以在json.dumps()使用indent選項來獲取\\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}'

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

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM