kyle brandt
¿Existe alguna forma de obtener json.dumps()
salida para aparecer como JSON con formato “bonito” dentro del cuaderno ipython?
json.dumps
tiene un indent
argumento, imprimir el resultado debería ser suficiente:
print(json.dumps(obj, indent=2))
-
¿Qué pasa con los colores en la salida?
– ganqqwerty
3 de septiembre de 2015 a las 9:49
-
sin embargo, el carácter chino se confundió con Unicode en este enfoque
– Luk Aron
28 de noviembre de 2019 a las 10:26
-
Eso simplemente no es cierto. de pitón
json.dumps
por defecto aensure_ascii=True
que escapa al punto de código chino (o en realidad: cualquier punto de código que no sea ASCII). Usarprint(json.dumps(obj, indent=2, ensure_ascii=False))
y los obtendrás sin escape.– filmador
28 de noviembre de 2019 a las 13:41
kyle barron
Esto podría ser ligeramente diferente de lo que OP estaba pidiendo, pero puede usar IPython.display.JSON
para ver interactivamente un JSON/dict
objeto.
from IPython.display import JSON
JSON({'a': [1, 2, 3, 4,], 'b': {'inner1': 'helloworld', 'inner2': 'foobar'}})
Editar: Esto funciona en Hydrogen y JupyterLab, pero no en Jupyter Notebook o en la terminal IPython.
Adentro Hidrógeno:
-
¡Nunca he sido más feliz!
– Diptangsu Gosvami
23 de febrero de 2021 a las 8:48
-
me desconcierta que esto funcione en Jupyter Lab, pero no en buenos cuadernos viejos. ahí llama repr_json si está presente.
– marscher
29 abr 2021 a las 19:51
Shankar ARUL
import uuid
from IPython.display import display_javascript, display_html, display
import json
class RenderJSON(object):
def __init__(self, json_data):
if isinstance(json_data, dict):
self.json_str = json.dumps(json_data)
else:
self.json_str = json_data
self.uuid = str(uuid.uuid4())
def _ipython_display_(self):
display_html('<div id="{}" style="height: 600px; width:100%;"></div>'.format(self.uuid), raw=True)
display_javascript("""
require(["https://rawgit.com/caldwell/renderjson/master/renderjson.js"], function() {
document.getElementById('%s').appendChild(renderjson(%s))
});
""" % (self.uuid, self.json_str), raw=True)
Para generar sus datos en formato plegable:
RenderJSON(your_json)
Copia pegada de aquí: https://www.reddit.com/r/IPython/comments/34t4m7/lpt_print_json_in_collapsible_format_in_ipython/
-
No puedo hacer que funcione en Jupyter 1.0. ¿Alguna idea de por qué? La consola de Javascript dice: “SyntaxError: token inesperado
– Pierre Carbonelle
13 de diciembre de 2016 a las 10:59
-
Hay un problema en el código. La línea 10 debe cambiarse a
self.json_str = json_data
. Resuelve el problema informado por @user474491.– Hasan
22 de diciembre de 2016 a las 9:51
-
@Hassan: ¡Arreglado! Gracias por la sugerencia.
– bskaggs
26 de diciembre de 2016 a las 18:34
-
Actualicé algunos problemas y conseguí que esto funcionara en el último Jupyter Notebook, incluidas las sugerencias de @user474491 y @Hassan, también agregué una llamada explícita a
_ipython_display_()
en el__init__()
para asegurarnos de que podemos intercalar llamadas de forma segura a la interfaz nativa de Pythonprint()
yRenderJSON()
y aún así hacer que esto funcione gist.github.com/t27/48b3ac73a1479914f9fe9383e5d45325– Tarang Shah
11 de abril de 2018 a las 6:14
-
Acabo de obtener “Error de JavaScript: el requisito no está definido”.
– Andy
2 de enero a las 12:43
Solo estoy agregando la variable expandida a la respuesta de @Kyle Barron:
from IPython.display import JSON
JSON(json_object, expanded=True)
Encontré esta página buscando una manera de eliminar el literal \n
s en la salida. Estamos haciendo una entrevista de codificación usando Jupyter y quería una forma de mostrar el resultado de una función. perty real como. Mi versión de Jupyter (4.1.0) no los representa como saltos de línea reales. La solución que produje es (espero que esto sea no la mejor manera de hacerlo pero…)
import json
output = json.dumps(obj, indent=2)
line_list = output.split("\n") # Sort of line replacing "\n" with a new line
# Now that our obj is a list of strings leverage print's automatic newline
for line in line_list:
print line
¡Espero que esto ayude a alguien!
Para el cuaderno Jupyter, puede ser suficiente generar el enlace para abrir en una nueva pestaña (con el visor JSON de Firefox):
from IPython.display import Markdown
def jsonviewer(d):
f=open('file.json','w')
json.dump(d,f)
f.close()
print('open in firefox new tab:')
return Markdown('[file.json](./file.json)')
jsonviewer('[{"A":1}]')
'open in firefox new tab:
Mohit Munjal
Solo una extensión de @filmor respuesta (https://stackoverflow.com/a/18873131/7018342).
Esto codifica elementos que podrían no ser compatibles con json.dumps y también brinda una función útil que se puede usar de la misma manera que usaría imprimir.
import json
class NpEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
if isinstance(obj, np.floating):
return float(obj)
if isinstance(obj, np.ndarray):
return obj.tolist()
if isinstance(obj, np.bool_):
return bool(obj)
return super(NpEncoder, self).default(obj)
def print_json(json_dict):
print(json.dumps(json_dict, indent=2, cls=NpEncoder))
Uso:
json_dict = {"Name":{"First Name": "Lorem", "Last Name": "Ipsum"}, "Age":26}
print_json(json_dict)
>>>
{
"Name": {
"First Name": "Lorem",
"Last Name": "Ipsum"
},
"Age": 26
}
la forma más corta es usar
pprint()
para imprimir el JSON (from pprint import pprint
)– PJ_
24 abr a las 21:19