[英]How to convert Object with Properties to JSON without “_” in Python 3?
我想將Python對象轉換為JSON格式。
類User的私有屬性是使用屬性定義的。 我在這里找到了方法to_Json()
class User:
def __init__(self):
self._name = None
self._gender = None
@property
def name(self):
return self._name
@name.setter
def name(self, name):
self._name = name
@property
def gender(self):
return self._gender
@gender.setter
def gender(self, gender):
self._gender = gender
def to_Json(self):
return json.dumps(self, default=lambda o: o.__dict__, allow_nan=False, sort_keys=False, indent=4)
使用此類和方法的輸出是:
{
"_name": "Peter",
"_age": 26
}
什么是擺脫JSON格式下划線的最簡單方法? (我想要“name”而不是“_name”)刪除類中的下划線不是一個選項,因為我收到一個錯誤(最大遞歸深度)。 我認為重命名屬性的方法可以解決這個問題,但這是最好的解決方案嗎?
在json.dumbs之前重命名所有鍵(見這里 )並不是一個實用的方法,因為我的類比上面的例子更復雜。
那么,盡可能快地將Python對象轉換為JSON格式的最佳做法是什么?
如果您發布的示例代碼鏡像您的實際代碼,那么根本沒有任何理由可以使用這些屬性。 你可以這樣做:
class User(object):
def __init__(self):
self.name = None
self.age = None
因為你並沒有真正隱藏下划線和屬性后面的用戶的任何東西。
如果您確實需要進行轉換,我喜歡在自定義編碼器中執行此操作:
class MyEncoder(json.JSONEncoder):
def default(self, o):
return {k.lstrip('_'): v for k, v in vars(o).items()}
json_encoded_user = json.dumps(some_user, cls=MyEncoder)
在Python中,通常不使用屬性作為基本屬性。 您可以將name
和age
保留為可直接訪問的屬性。 除非您在獲取或設置時需要轉換數據,否則無需將它們包裝在property
對象中。
如果您有充分的理由使用帶下划線的屬性但將它們反映為JSON詞典,則可以在轉換為字典時轉換字典:
object_dict = lambda o: {key.lstrip('_'): value for key, value in o.__dict__.items()}
return json.dumps(self, default=object_dict, allow_nan=False, sort_keys=False, indent=4)
請注意,這對防止沖突沒有任何作用。 如果您的實例上同時具有_name
和name
屬性,那么您將破壞其中一個或另一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.