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.
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-
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…
<menu id="file" value="File"> <popup> <menuitem value="New" onclick="CreateNewDoc()" /> <menuitem value="Open" onclick="OpenDoc()" /> <menuitem value="Close" onclick="CloseDoc()" /> </popup> </menu>
Para parsear objetos JSON lo mejor es utilizar el parseador oficial del creador, en JSON2 y en JSON2.
Lo agregaremos de la siguiente forma:
<script type="text/javascript" src="json2.js"></script>
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);
Simplemente debemos pasar el texto JSON al método JSON.parse.
var myobj = JSON.parse(json_txt); alert(myobj.name);
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 + ')');
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:
<script type="text/javascript" src="http://server2.example.com/getjson?jsonp=parseResponse"></script>
Y esto retornaría:
parseResponse({"Name": "Cheeso", "Rank": 7})