print leer jsonify ejemplo dict create array python json dictionary boolean

leer - python json ejemplo



Conversión de "verdadero"(JSON) al equivalente de Python "Verdadero" (2)

La API de estado del tren que uso recientemente agregó dos pares de valores de clave adicionales (has_arrived, has_departed) en el objeto JSON, lo que provocó que mi script (has_arrived, has_departed) .

Aquí está el diccionario:

{ "response_code": 200, "train_number": "12229", "position": "at Source", "route": [ { "no": 1, "has_arrived": false, "has_departed": false, "scharr": "Source", "scharr_date": "15 Nov 2015", "actarr_date": "15 Nov 2015", "station": "LKO", "actdep": "22:15", "schdep": "22:15", "actarr": "00:00", "distance": "0", "day": 0 }, { "actdep": "23:40", "scharr": "23:38", "schdep": "23:40", "actarr": "23:38", "no": 2, "has_departed": false, "scharr_date": "15 Nov 2015", "has_arrived": false, "station": "HRI", "distance": "101", "actarr_date": "15 Nov 2015", "day": 0 } ] }

No es de extrañar, recibí el siguiente error:

Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name ''false'' is not defined

Si no me equivoco, creo que esto se debe a que el valor booleano en la respuesta JSON es false / true mientras que Python reconoce False / True . ¿Hay alguna manera de evitarlo?

PD: intenté convertir la respuesta JSON de has_arrived a string y luego volver a convertirla en un valor booleano, solo para descubrir que siempre obtendré un valor True si hay algún carácter en la cadena. Estoy un poco atrapado aquí.


Aunque la sintaxis de declaración de objetos de Python es muy similar a la sintaxis JSON, son distintas e incompatibles. Además del problema True / true , hay otros problemas (por ejemplo, Json y Python manejan las fechas de manera muy diferente, y Python permite comentarios, mientras que Json no lo hace).

La solución es convertir de uno a otro.

La biblioteca json de Python se puede usar para analizar (leer) el Json en una cadena y convertirlo en un objeto Python ...

data_from_api = ''{...}'' info = json.loads(data_from_api)

También puedes convertir objetos python a json ...

info_as_json = json.dumps(info)

Ejemplo:

# Import the json library import json # Get the Json data from the question into a variable... data_from_api = """{ "response_code": 200, "train_number": "12229", "position": "at Source", "route": [ { "no": 1, "has_arrived": false, "has_departed": false, "scharr": "Source", "scharr_date": "15 Nov 2015", "actarr_date": "15 Nov 2015", "station": "LKO", "actdep": "22:15", "schdep": "22:15", "actarr": "00:00", "distance": "0", "day": 0 }, { "actdep": "23:40", "scharr": "23:38", "schdep": "23:40", "actarr": "23:38", "no": 2, "has_departed": false, "scharr_date": "15 Nov 2015", "has_arrived": false, "station": "HRI", "distance": "101", "actarr_date": "15 Nov 2015", "day": 0 } ] }""" # Convert that data into a python object... info = json.loads(data_from_api) print(info)

Y un segundo ejemplo que muestra cómo ocurre la conversión Verdadero / verdadero. Tenga en cuenta también los cambios en la cotización y cómo se elimina el comentario ...

info = {''foo'': True, # Some insightful comment here ''bar'': ''Some string''} # Print a condensed representation of the object print(json.dumps(info)) # Or print a formatted version which is more human readable but uses more bytes print(json.dumps(info, indent=2))

Salida:

{"bar": "Some string", "foo": true} { "bar": "Some string", "foo": true }


En lugar de hacer eval en la respuesta, use el módulo json .