¿Cómo volcar un dict a un archivo JSON?

Resuelto holys asked hace 11 años • 0 respuestas

Tengo un dict como este:

sample = {'ObjectInterpolator': 1629,  'PointInterpolator': 1675, 'RectangleInterpolator': 2042}

No puedo entender cómo volcar el dict a un archivo JSON como se muestra a continuación:

{      
    "name": "interpolator",
    "children": [
      {"name": "ObjectInterpolator", "size": 1629},
      {"name": "PointInterpolator", "size": 1675},
      {"name": "RectangleInterpolator", "size": 2042}
     ]
}

¿Existe una forma pitónica de hacer esto?

Puedes adivinar que quiero generar un d3mapa de árbol.

holys avatar Jun 11 '13 19:06 holys
Aceptado
import json
with open('result.json', 'w') as fp:
    json.dump(sample, fp)

Esta es una manera más fácil de hacerlo.

En la segunda línea de código, el archivo result.jsonse crea y se abre como variable fp.

¡En la tercera línea, su dictado samplese escribe en result.json!

moobi avatar Sep 26 '2014 10:09 moobi

Combine la respuesta de @mgilson y @gnibbler, encontré que lo que necesitaba era esto:

d = {
    "name": "interpolator",
    "children": [{
        'name': key,
        "size": value
        } for key, value in sample.items()]
    }
j = json.dumps(d, indent=4)
with open('sample.json', 'w') as f:
    print >> f, j

De esta manera, obtuve un archivo json con una bonita impresión. Los trucos print >> f, jse encuentran aquí: http://www.anthonydebarros.com/2012/03/11/generate-json-from-sql-using-python/

holys avatar Jun 12 '2013 08:06 holys
d = {"name":"interpolator",
     "children":[{'name':key,"size":value} for key,value in sample.items()]}
json_string = json.dumps(d)

Desde Python 3.7, el orden de los dictados se conserva https://docs.python.org/3.8/library/stdtypes.html#mapping-types-dict

Los diccionarios conservan el orden de inserción. Tenga en cuenta que la actualización de una clave no afecta el orden. Las claves agregadas después de la eliminación se insertan al final

mgilson avatar Jun 11 '2013 12:06 mgilson