Saltar al contenido

¿Cómo verifico si una cadena es JSON válida en Python?

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 ).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *