JSON multilínea de Python y variables

Resuelto user5740843 asked hace 7 años • 2 respuestas

¡Estoy intentando codificar un JSON algo grande en Python (v2.7) y tengo problemas para ingresar mis variables!

Como el JSON es de varias líneas y para mantener mi código ordenado, he decidido usar las comillas dobles triples para que se vea de la siguiente manera:

my_json = """{
        "settings": {
                "serial": "1",
                "status": "2",
                "ersion": "3"
        },
        "config": {
                "active": "4",
                "version": "5"
        }
}"""

Codificar esto y generarlo funciona bien para mí, pero no estoy seguro de cómo puedo cambiar los números que tengo allí y reemplazarlos por cadenas variables. He intentado:

    "settings": {
            "serial": 'json_serial',

pero fue en vano. ¡Cualquier ayuda sería apreciada!

user5740843 avatar Feb 24 '17 23:02 user5740843
Aceptado

¿Por qué no lo conviertes en un diccionario y configuras variables y luego usas la biblioteca json para convertirlo en json?

import json
json_serial = "123"
my_json = {
    'settings': {
        "serial": json_serial,
        "status": '2',
        "ersion": '3',
    },
    'config': {
        'active': '4',
        'version': '5'
    }
}
print(json.dumps(my_json))
davidejones avatar Feb 24 '2017 16:02 davidejones

Si insiste absolutamente en generar JSON con concatenación de cadenas (y, para ser claros, no debería hacerlo en absoluto), la única forma de estar completamente seguro de que su salida es JSON válida es generar las subcadenas que se sustituyen con un generador JSON. Eso es:

'''"settings" : {
  "serial"   : {serial},
  "version"  : {version}
}'''.format(serial=json.dumps("5"), version=json.dumps(1))

Pero no lo hagas. De verdad, de verdad que no. La respuesta de @davidejones es lo correcto para este escenario.

Charles Duffy avatar Feb 24 '2017 17:02 Charles Duffy