2017-03-18 58 views
-2

我試圖轉換json字符串model如何轉換JSON在python3

話,很容易與.

我已經檢查another question

但不同中獲取價值,我的JSON刺痛模型看起來像,

{ 
    "id":"123", 
    "name":"name", 
    "key":{ 
     "id":"345", 
     "des":"des" 
    }, 
} 

我更喜歡使用2類像,

class A: 
    id = '' 
    name = '' 
    key = new B() 


class B: 
    id = '' 
    des = '' 

回答

1

爲了做到這一點,你應該提供您的自定義的回調爲object_hook參數的json.loads功能。

object_hook是一個可選的功能,將與任何對象文本解碼(一個dict)的 結果被調用。將使用 object_hook的返回值代替dict。此功能 可用於實現自定義解碼器(例如JSON-RPC類提示)。

+0

感謝我給它一個嘗試當然,你首先需要的 –

0

考慮使用collections.namestuple子類:

json_str = ''' 
{ 
    "id":"123", 
    "name":"name", 
    "key":{ 
     "id":"345", 
     "des":"des" 
    } 
}''' 

B = collections.namedtuple('B', 'id des') 
A = collections.namedtuple('A', 'id name key') 

def make_models(o): 
    if 'key' in o: 
     return A(o['id'], o['name'], B(id=o['key']['id'], des=o['key']['des'])) 
    else: 
     return o 

result = json.loads(json_str, object_hook=make_models) 

print(type(result)) # outputs: <class '__main__.A'> 
print(result.id)  # outputs: 123 
print(result.key.id) # outputs: 345 
+0

如何獲得堆性能,我是新的python和python 3.6,謝謝 –

+0

正如你看到'collections.namedtuple('B','id des')':'id'和'des'是屬性。以相同的方式添加新屬性 – RomanPerekhrest

+0

是的,我明白了你的意思,但是有時候json的關鍵字是一個關鍵字,比如'class'或'str',我有100個屬性。 –