Ho una stringa in Python, voglio sapere se è valido JSON.
json.loads(mystring)
genererà un errore se la stringa non è JSON ma non voglio rilevare un'eccezione.
Voglio qualcosa di simile, ma non funziona:
if type(mysrting) == dict:
myStrAfterLoading = json.loads(mystring)
else:
print "invalid json passed"
Devo prendere quel ValueError per vedere se la mia stringa è JSON?
risposte:
33 per risposta № 1La risposta corretta è: smettila di non voler prendere il ValueError
.
Esempio Lo script Python restituisce un valore booleano se una stringa è valida json:
import json
def is_json(myjson):
try:
json_object = json.loads(myjson)
except ValueError, e:
return False
return True
print is_json("{}") # prints True
print is_json("{asdf}") # prints False
print is_json("{"age":100}") # prints True
print is_json("{"age":100 }") # prints False
print is_json("{"age":100 }") # prints True
20 per risposta № 2
Per verificare la stringa sarebbe necessario analizzarlo -quindi se hai controllato e poi convertito, ci vorrebbe letteralmente il doppio. Cogliere l'eccezione è il modo migliore. È interessante notare che puoi ancora usare un'espressione di stile if-else:
try:
json_object = json.loads(json_string)
except ValueError, e:
pass # invalid json
else:
pass # valid json
10 per risposta № 3
C'è qualche ragione per cui non vuoi prendere l'eccezione?
Tieni presente che testare e catturare unl'eccezione può essere incredibilmente veloce in Python, ed è spesso il modo Python di fare le cose, invece di testare per tipo (fondamentalmente, fidarsi di digitazione e reagire di conseguenza).
Per rendere la tua mente un po 'più a suo agio, dai un'occhiata qui: Python se contro provare - tranne
Se sei ancora preoccupato per la leggibilità, aggiungi un commento al codice per spiegare perché stai usando try / except;)
Ho faticato con questo approccio in passato, provenendo da uno sfondo Java, ma questo è in effetti il modo più semplice per farlo in Python ... e semplice è meglio che complesso.
-3 per risposta № 4
perché analizzare quando è possibile utilizzare i tipi come segue:
def is_json(myjson):
return type(myjson) == type({})
def is_json_arr(myjson):
return type(myjson) == type([{}])