====== JSON ====== El nombre viene de JavaScript Object Notation, es un formato de texto fácil de leer por JavaScript. Es un reemplazo perfecto al XML como formato de intercambio de datos. ===== Sintaxis ===== object {} { members } members pair pair , members pair string : value array [] [ elements ] elements value value , elements value string number object array true false null string "" " chars " chars char char chars char any-Unicode-character- except-"-or-\-or- control-character \" \\ \/ \b \f \n \r \t \u four-hex-digits number int int frac int exp int frac exp int digit digit1-9 digits - digit - digit1-9 digits frac . digits exp e digits digits digit digit digits e e e+ e- E E+ E- ==== Comparación JSON con XML ==== El siguiente código en JSON... {"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }} ... equivale al siguiente en xml... ===== Combinandolo con JavaScript ===== Para parsear objetos JSON lo mejor es utilizar el parseador oficial del creador, en [[http://www.json.org/json2.js|JSON2]] y en {{tags:json:json2_parser.rar|JSON2}}. \\ Lo agregaremos de la siguiente forma: ==== Convertir un objeto a texto JSON ==== Con este parseador nos es muy sencillo convertir un objeto JavaScript a texto JSON: var obj = { name : 'Jeffrey', lastName : 'Way' } var json_txt = JSON.stringify(obj); ==== Convertir un texto JSON a objeto ==== Simplemente debemos pasar el texto JSON al método ''JSON.parse''. var myobj = JSON.parse(json_txt); alert(myobj.name); ==== Convertir un texto JSON a objeto con eval ==== Otra opción para convertir un texto en formato JSON a un objeto JavaScript es utilizar la función ''eval'', esta forma es inmediata del lenguaje, es decir sin necesidad de utilizar el parser, pero utilizar esta función está desaconsejado debido a lo insegura que es: var myobj = eval('(' + json_txt + ')'); ===== Formatos derivados ===== ==== JSONP ==== Viene del nombre //JSON with Padding//, es una forma de complementar el formato JSON que permite llamar directamente a una función JavaScript mediante una cadena en formato JSON. \\ La idea es que el mismo servidor devuelva código JavaScript que llame a una función. Por ejemplo, sabiendo que ''http://server2.example.com/getjson'' devuelve: {"Name": "Cheeso", "Rank": 7} Podríamos decir que para que tubiese la "propiedad" de JSONP tendríamos que pasar el parámetro ''jsonp'' con el nombre de la función a la que se llamará de la siguiente forma: Y esto retornaría: parseResponse({"Name": "Cheeso", "Rank": 7})