EG
Size: a a a
EG
G
EG
G
serde_json::Value. Если мне нужно строить долгоживущее приложение, я обмажусь #[derive(Serialize, Deserialize)] и прочими аттрибутами, чтобы обеспечить типобезопасность и интеграцию с IDE. ЯЗыки со статической типизацией позволяют перемещаться по "уровням типизации": от Any до serde_json::Value до моих тайп-чекед структур.EG
try:
field1 = data['with']['long']['path'][0]['five']
field2 = data['with']['parameters']
if field2['type'] == 'param1':
field3 = data['for']['param1']
else:
field3 = data['for']['param2']
return [
checked_cast(str, field1),
checked_cast(int, field2),
checked_cast(bool, field3)
]
except (LookupError, CastingError):
log.error("Bad answer from API: %s", data)
return None
G
try:
field1 = data['with']['long']['path'][0]['five']
field2 = data['with']['parameters']
if field2['type'] == 'param1':
field3 = data['for']['param1']
else:
field3 = data['for']['param2']
return [
checked_cast(str, field1),
checked_cast(int, field2),
checked_cast(bool, field3)
]
except (LookupError, CastingError):
log.error("Bad answer from API: %s", data)
return None
EG
Option на каждый .get()G
Option на каждый .get()EG
EG
G
EG
EG
catch_unwind, но это уже как-то ну такоеEG
EG
G
.get().ok_or(())?EG
1[1] должна бросать эксепшн.EG
.get().ok_or(())?λ
['пишу']['такое']['выражение'] и получаю.let val = json ^? at 'пишу' . at 'такое' . at 'выражение'