{"id":197,"date":"2014-11-25T14:12:45","date_gmt":"2014-11-25T20:12:45","guid":{"rendered":"http:\/\/daimonikos.com\/blog\/?p=197"},"modified":"2014-11-25T15:51:52","modified_gmt":"2014-11-25T21:51:52","slug":"creacion-y-consumo-de-json-con-php","status":"publish","type":"post","link":"https:\/\/daimonikos.com\/blog\/creacion-y-consumo-de-json-con-php\/","title":{"rendered":"Creaci\u00f3n y consumo de JSON con PHP"},"content":{"rendered":"<p>Al momento de crear una p\u00e1gina o aplicaci\u00f3n web la optimizaci\u00f3n de recursos es un aspecto fundamental, principalmente cuando se trabaja con Web Services.<\/p>\n<p>Normalmente un Web Service usa el est\u00e1ndar XML para el intercambio de informaci\u00f3n el cual est\u00e1 basado en etiquetas haciendo que la informaci\u00f3n enviada y recibida tenga un peso mayor.<\/p>\n<p>Aqu\u00ed es donde entra <strong>JSON<\/strong> (JavaScript Object Notation), el cual es una manera de serializar la informaci\u00f3n haci\u00e9ndola m\u00e1s ligera y que PHP puede manejar sin problema desde la versi\u00f3n 5.2.1.<\/p>\n<p>Pr\u00e1cticamente cualquier objeto en PHP puede convertirse a JSON, siendo los arrays asociativos quienes aprovechan mejor esta caracter\u00edstica:<\/p>\n<pre class=\"prettyprint\">\r\n$miArreglo = array(\"pera\"=>\"verde\", \"manzana\"=>\"roja\", \"naranja\"=>\"naranja\");\r\n$cadenaJSON = json_encode($miArreglo);\r\n\/\/ El valor de $cadenaJSON ser\u00eda: {\"pera\":\"verde\",\"manzana\":\"roja\",\"naranja\":\"naranja\"}\r\n<\/pre>\n<p>Es importante la codificaci\u00f3n de los caracteres, si estamos trabajando con UTF-8, podemos usar la funci\u00f3n <strong>utf8_encode()<\/strong> antes de la conversi\u00f3n a JSON:<\/p>\n<pre class=\"prettyprint\">\r\n$miArreglo = array(\"deporte\"=>utf8_encode(\"f\u00fatbol soccer\"), \"instrumento\"=>utf8_encode(\"bal\u00f3n\"));\r\n$cadenaJSON = json_encode($miArreglo);\r\n<\/pre>\n<p>Ya sabemos crear una cadena de texto en formato JSON, ahora vamos a consumirla.<\/p>\n<p>Si con <strong>json_encode()<\/strong> convertimos un objeto a JSON, con <strong>json_decode()<\/strong> lo volvemos a convertir a objeto:<\/p>\n<pre class=\"prettyprint\">\r\n$json = '{\r\n\t\"pera\":\"verde\",\r\n\t\"manzana\":\"roja\",\r\n\t\"naranja\":\"naranja\"\r\n}';\r\n\r\n$objeto = json_decode($json);\r\n<\/pre>\n<p>Al imprimir la variable $objeto con la function print_r() obtendremos:<\/p>\n<pre class=\"prettyprint\">\r\nstdClass Object (\r\n\t[pera] => verde\r\n\t[manzana] => roja\r\n\t[naranja] => naranja\r\n)\r\n\r\n\/\/ Si quiero mostrar alg\u00fan valor:\r\necho $objeto=>pera; \/\/ el resultado ser\u00e1: verde\r\n<\/pre>\n<p>Si queremos convertirlo a un array asociativo, agregamos true como segundo par\u00e1metro en json_decode:<\/p>\n<pre class=\"prettyprint\">\r\n$objeto = json_decode($json, true);\r\n\r\n\/\/ para mostrar un valor del arreglo:\r\necho $objeto['pera']; \/\/ el resultado ser\u00e1: verde\r\n<\/pre>\n<p><strong>Consumo de JSON desde una URL externa<\/strong><\/p>\n<p>Actualmente los Web Services son producidos tambi\u00e9n en formato JSON para aligerar el peso de la informaci\u00f3n. Si queremos consumirlos desde PHP, s\u00f3lo necesitamos la direcci\u00f3n URL y usar la funci\u00f3n <strong>file_get_contents()<\/strong>:<\/p>\n<pre class=\"prettyprint\">\r\n$url = 'http:\/\/daimonikos.com\/demo\/books.json';\r\n$books = json_decode(file_get_contents($url), true);\r\n<\/pre>\n<p>Al estar convirtiendo el Web Service a un array asociativo, podemos recorrer cada registro con la funci\u00f3n <strong>foreach()<\/strong>:<\/p>\n<pre class=\"prettyprint\">\r\nforeach($books as $b){\r\n\techo $b['name'].'&lt;br&gt;';\r\n}\r\n\r\n\/* El resultado ser\u00eda:\r\nThe Lightning Thief\r\nThe Sea of Monsters\r\nSophie's World : The Greek Philosophers\r\nLucene in Action, Second Edition\r\n*\/\r\n<\/pre>\n<p>Por \u00faltimo, si queremos validar que una cadena JSON est\u00e9 correctamente formateada, podemos usar la p\u00e1gina <a href=\"http:\/\/jsonlint.com\" target=\"_blank\">jsonlint.com<\/a> para validarlo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Al momento de crear una p\u00e1gina o aplicaci\u00f3n web la optimizaci\u00f3n de recursos es un aspecto fundamental, principalmente cuando se trabaja con Web Services. Normalmente un Web Service usa el est\u00e1ndar XML para el intercambio de informaci\u00f3n el cual est\u00e1 basado en etiquetas haciendo que la informaci\u00f3n enviada y recibida tenga un peso mayor. Aqu\u00ed [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":203,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29,31],"tags":[],"class_list":["post-197","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollo-web","category-php"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/posts\/197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/comments?post=197"}],"version-history":[{"count":1,"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/posts\/197\/revisions"}],"predecessor-version":[{"id":233,"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/posts\/197\/revisions\/233"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/media\/203"}],"wp:attachment":[{"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/media?parent=197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/categories?post=197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daimonikos.com\/blog\/wp-json\/wp\/v2\/tags?post=197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}