/ / Verifica se una stringa è JSON in python? - Python, JSON, dizionario

Verifica se una stringa è JSON in python? - Python, JSON, dizionario

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 № 1

La 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([{}])