Solución:
Puedes intentar hacer json.loads()
, que arrojará un ValueError
si la cadena que pasa no se puede decodificar como JSON.
En general, la filosofía “Pythonic” para este tipo de situación se llama EAFP, por Es más fácil pedir perdón que permiso.
Ejemplo de secuencia de comandos de Python devuelve un booleano si una cadena es json válido:
import json
def is_json(myjson):
try:
json_object = json.loads(myjson)
except ValueError as e:
return False
return True
Que imprime:
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
print is_json('{"age":100 }') #prints True
print is_json('{"foo":[5,6.8],"foo":"bar"}') #prints True
Convierta una cadena JSON en un diccionario de Python:
import json
mydict = json.loads('{"foo":"bar"}')
print(mydict['foo']) #prints bar
mylist = json.loads("[5,6,7]")
print(mylist)
[5, 6, 7]
Convierta un objeto de Python en una cadena JSON:
foo = {}
foo['gummy'] = 'bear'
print(json.dumps(foo)) #prints {"gummy": "bear"}
Si desea acceder al análisis de bajo nivel, no utilice el suyo propio, utilice una biblioteca existente: http://www.json.org/
Gran tutorial sobre el módulo JSON de Python: https://pymotw.com/2/json/
Es String JSON y muestra errores de sintaxis y mensajes de error:
sudo cpan JSON::XS
echo '{"foo":[5,6.8],"foo":"bar" bar}' > myjson.json
json_xs -t none < myjson.json
Huellas dactilares:
, or } expected while parsing object/hash, at character offset 28 (before "bar}
at /usr/local/bin/json_xs line 183, <STDIN> line 1.
json_xs
es capaz de verificar la sintaxis, analizar, proteger, codificar, decodificar y más:
https://metacpan.org/pod/json_xs
Yo diría que analizarlo es la única forma de saberlo por completo. Python generará una excepción json.loads()
función (casi con certeza) si no el formato correcto. Sin embargo, para los propósitos de su ejemplo, probablemente solo pueda marcar el primer par de caracteres que no son espacios en blanco …
No estoy familiarizado con el JSON que Facebook envía, pero la mayoría de las cadenas JSON de las aplicaciones web comenzarán con un cuadrado abierto. [
o rizado {
soporte. No conozco formatos de imágenes que comiencen con esos personajes.
Por el contrario, si sabe qué formatos de imagen pueden aparecer, puede verificar el inicio de la cadena de sus firmas para identificar imágenes y asumir que tiene JSON si no es una imagen.
Otro truco simple para identificar un gráfico, en lugar de una cadena de texto, en el caso de que esté buscando un gráfico, es simplemente probar los caracteres que no son ASCII en el primer par de docenas de caracteres de la cadena (asumiendo que JSON es ASCII ).