{"id":118,"date":"2020-06-08T19:38:24","date_gmt":"2020-06-08T17:38:24","guid":{"rendered":"https:\/\/www.pythonparatodo.com\/?p=118"},"modified":"2020-11-07T07:54:13","modified_gmt":"2020-11-07T06:54:13","slug":"json","status":"publish","type":"post","link":"https:\/\/www.pythonparatodo.com\/?p=118","title":{"rendered":"JSON"},"content":{"rendered":"\n<p>El formato <strong>json<\/strong> (JavaScript Object Notation) es un formato de intercambio de datos ampliamente usado en JavaScript y que se convirti\u00f3 r\u00e1pidamente en una alternativa a xml para otros lenguajes de programaci\u00f3n. Esto es gracias a que json es mas f\u00e1cil de usar que xml, de ah\u00ed que muchos servicios web usen este formato en sus apis para intercambiar datos. Por ejemplo, la geolocalizaci\u00f3n de Google o los datos del tiempo de openweathermap.<\/p>\n\n\n\n<p>Json est\u00e1 basado en YAML que es un est\u00e1ndar para todos los lenguajes de programaci\u00f3n de serializaci\u00f3n de datos, f\u00e1cil de entender por las personas.<\/p>\n\n\n\n<p>Python dispone de un m\u00f3dulo llamado json para gestionar los intercambios con objetos json desde objetos o ficheros. Hay que tener en cuenta que en json solo se pueden almacenar cadenas, n\u00fameros enteros, n\u00fameros en coma flotante, operadores l\u00f3gicos, listas y diccionarios, no es posible almacenar los otros tipos de objetos de Python.<\/p>\n\n\n\n<p>Para usar el m\u00f3dulo primero es necesario importarlo con el siguiente comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import json<\/code><\/pre>\n\n\n\n<p>Con el m\u00f3dulo importado se pueden usar, entre otras, los m\u00e9todos de carga de json, ya sea desde un fichero con <strong>json.load()<\/strong> o desde una string con <strong>json.loads()<\/strong>. Para grabar un diccionario o string en un fichero se usa <strong>json.dump()<\/strong> y si el destino final es un string se usa <strong>json.dumps()<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">json.load(fichero)<\/h3>\n\n\n\n<p>Puede tomar varios valores, pero el principal es el manejador del fichero desde donde va a leer el contenido que convertir\u00e1 en un objeto json. Python trata los datos json como diccionarios.<\/p>\n\n\n\n<p>En el caso del ejemplo se abre el fichero en modo lectura asign\u00e1ndolo a la variable fichero, al hacerlo con <strong>with<\/strong> el fichero se cerrar\u00e1 cuando termine el \u00e1mbito de ejecuci\u00f3n de with. El siguiente paso es asignar a la variable men\u00fa el contenido del archivo. Al tratarse de un archivo json, la variable <strong>menu<\/strong> pasa a tener el tipo de la clase dict. La siguiente l\u00ednea de c\u00f3digo lo corrobora mostrando en pantalla el tipo de esta variable y despu\u00e9s se muestra el contenido de la variable y los elementos del diccionario uno a uno.<\/p>\n\n\n\n<p>El contenido del fichero json, llamado <strong>menu.json<\/strong> tiene el siguiente contenido.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">{\n        \"Nuevo\": \"CreaNuevoDocumento()\",\n        \"Abrir\": \"AbrirDocumento()\",\n        \"Cerrar\": \"CerrarDocumento()\"\n}<\/code><\/pre>\n\n\n\n<p>El c\u00f3digo Python es el siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import json\nwith open('menu.json') as fichero:\n    menu = json.load(fichero)\n    print('El tipo de men\u00fa es: %s' %type(menu))\n    print(menu)\n    for elemento in menu:\n        print('La clave es: %s y su valor es: %s' %(elemento,menu[elemento]))<\/code><\/pre>\n\n\n\n<p>Y el resultado mostrado en pantalla el siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">python leejson.py\nEl tipo de men\u00fa es: &lt;class 'dict'>\n{'Nuevo': 'CreaNuevoDocumento()', 'Abrir': 'AbrirDocumento()', 'Cerrar': 'CerrarDocumento()'}\nLa clave es: Nuevo y su valor es: CreaNuevoDocumento()\nLa clave es: Abrir y su valor es: AbrirDocumento()\nLa clave es: Cerrar y su valor es: CerrarDocumento()<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">json.loads(string)<\/h3>\n\n\n\n<p>En el caso de json.loads() el valor que se toma es un string para convertirlo en el objeto json.<\/p>\n\n\n\n<p>En el siguiente ejemplo tras importar el m\u00f3dulo, se le asigna a la variable datos un texto en formato json. Con la siguiente l\u00ednea se ve claramente que el tipo de la variable datos es de la clase string. Seguidamente se usa el m\u00e9todo json.loads() y se muestra en pantalla su tipo, contenido y elementos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import json\ndatos = '''{\n        \"Nuevo\": \"CreaNuevoDocumento()\",\n        \"Abrir\": \"AbrirDocumento()\",\n        \"Cerrar\": \"CerrarDocumento()\"\n}'''\nprint('El tipo de datos es: %s' %type(datos))\nmenu = json.loads(datos)\nprint('El tipo de men\u00fa es: %s' %type(menu))\nprint(menu)\nfor elemento in menu:\n    print('La clave es: %s y su valor es: %s' %(elemento,menu[elemento]))<\/code><\/pre>\n\n\n\n<p>El resultado es el siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">python leejsonstring.py\nEl tipo de datos es: &lt;class 'str'>\nEl tipo de men\u00fa es: &lt;class 'dict'>\n{'Nuevo': 'CreaNuevoDocumento()', 'Abrir': 'AbrirDocumento()', 'Cerrar': 'CerrarDocumento()'}\nLa clave es: Nuevo y su valor es: CreaNuevoDocumento()\nLa clave es: Abrir y su valor es: AbrirDocumento()\nLa clave es: Cerrar y su valor es: CerrarDocumento()<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">json.dump(diccionario, fichero)<\/h3>\n\n\n\n<p>Este m\u00e9todo se usa para guardar un diccionario en un fichero json, el primer argumento es el diccionario y el segundo es el manejador del fichero. Hay que prestar atenci\u00f3n porque si en vez de un diccionario se le pasa una cadena de texto, el m\u00e9todo guardar\u00e1 los datos, pero al no tener el formato correcto, luego no se podr\u00e1n leer.<\/p>\n\n\n\n<p>El siguiente ejemplo guarda el contenido de la variable men\u00fa que es de tipo dict() en el fichero menu2.json<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import json\nmenu = {\n        \"Nuevo\": \"CreaNuevoDocumento()\",\n        \"Abrir\": \"AbrirDocumento()\",\n        \"Cerrar\": \"CerrarDocumento()\"\n}\nprint(type(menu))\nprint(menu)\nwith open(\"menu2.json\",\"w\") as fichero:\n    json.dump(menu,fichero)<\/code><\/pre>\n\n\n\n<p>En pantalla se muestra lo siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">python escribejson.py\n&lt;class 'dict'>\n{'Nuevo': 'CreaNuevoDocumento()', 'Abrir': 'AbrirDocumento()', 'Cerrar': 'CerrarDocumento()'}<\/code><\/pre>\n\n\n\n<p>El resultado es un archivo llamado menu2.json con el siguiente contenido:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">{\"Nuevo\": \"CreaNuevoDocumento()\", \"Abrir\": \"AbrirDocumento()\", \"Cerrar\": \"CerrarDocumento()\"}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">json.dumps(string)<\/h3>\n\n\n\n<p>En el caso de json.dumps() el valor que se toma es un objeto json para convertirlo en el string. Como se ha mencionado anteriormente, un objeto json de Python es un diccionario.<\/p>\n\n\n\n<p>En el siguiente ejemplo, tras importar el m\u00f3dulo json, se le asigna a la variable menu un objeto json, es decir un diccionario. Con la l\u00ednea siguiente se ve claramente que el tipo de la variable datos es de la clase dict. Seguidamente se usa el m\u00e9todo json.dumps() para asignar a la variable datos el contenido de la variable men\u00fa y se muestra en pantalla su tipo y contenido, viendo que el tipo de la variable datos es de la clase string.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import json\nmenu = {\n        \"Nuevo\": \"CreaNuevoDocumento()\",\n        \"Abrir\": \"AbrirDocumento()\",\n        \"Cerrar\": \"CerrarDocumento()\"\n}\nprint('El tipo de menu es: %s' %type(menu))\ndatos = json.dumps(menu)\nprint('El tipo de datos es: %s' %type(datos))\nprint(datos)<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>El formato json (JavaScript Object Notation) es un formato de intercambio de datos ampliamente usado en JavaScript y que se &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[54,4],"tags":[34,55,2,6],"class_list":["post-118","post","type-post","status-publish","format-standard","hentry","category-json","category-python","tag-ficheros","tag-json","tag-python","tag-python3"],"_links":{"self":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=118"}],"version-history":[{"count":5,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/118\/revisions"}],"predecessor-version":[{"id":242,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/118\/revisions\/242"}],"wp:attachment":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}