Ciao, per quanto riguarda la seconda domanda, ovvero quando tu provi ad accedere a campi che non esistono nel JSON, è abbastanza chiaro che ti vada in crash, in quanto tenti di accedere a dei dati che non esistono, quindi devi prevedere una gestione diversa. Ad esempio, se usi le librerie JSON del package "org.json.*" (cioè quelle presenti di default nell'sdk di android) hai a disposizione il metodo "has(...)" che ti permette di sapere se un certo JSON possiede o meno una determinata chiave.
Per quanto riguarda la prima domanda, invece, non c'è una risposta univoca in quanto essa dipende dall'implementazione della specifica libreria JSON che utilizzi. Ad esempio, se usi la libreria GSON esistono delle annotazioni specifiche che ti permettono di non deserializzare determinati campi a tua scelta.