Ik'heb op wikipedia gekeken en het gegoogled en de officiële documentatie gelezen, maar ik ben nog steeds'niet zover dat ik echt begrijp wat JSON is, en waarom ik'het zou gebruiken.
Ik heb een tijdje toepassingen gebouwd met PHP, MySQL en Javascript / HTML, en als JSON iets kan doen om mijn leven gemakkelijker te maken of mijn code beter of mijn gebruikersinterface beter, dan zou ik'er graag meer over willen weten. Kan iemand mij een beknopte uitleg geven?
JSON (JavaScript Object Notation) is een lichtgewicht formaat dat wordt gebruikt voor het uitwisselen van gegevens. Het is gebaseerd op een subset van JavaScript taal (de manier waarop objecten zijn opgebouwd in JavaScript). Zoals vermeld in de MDN, is sommige JavaScript geen JSON, en sommige JSON is geen JavaScript. Een voorbeeld van waar dit wordt gebruikt zijn web services reacties. In de 'old' days, web services used XML as their primary data format for transmitting back data, but since JSON appeared (Het JSON formaat is gespecificeerd in RFC 4627 door Douglas Crockford), it has been the preferred format because it is much more lightweight Je kan veel meer info vinden op de officiële JSON web site. JSON is opgebouwd uit twee structuren:
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
var x = {x:y}
niet JSON, dit is een Javascript object. De twee zijn niet hetzelfde. Het JSON equivalent (weergegeven in de Javascript taal) zou zijn var x = '{"x":"y"}'
. x
is een object van het type string niet een op zichzelf staand object's. Om hier een volwaardig Javascript object van te maken moet je het eerst parsen, var x = JSON.parse('{"x":"y"}');
, x
is nu wel een object maar dit is geen JSON meer.
Zie Javascript object Vs JSONWanneer je werkt met JSON en JavaScript, kan je in de verleiding komen om de eval
functie te gebruiken om het resultaat dat terugkomt in de callback te evalueren, maar dit wordt niet aangeraden omdat er twee karakters (U+2028 & U+2029) geldig zijn in JSON maar niet in JavaScript (lees meer hierover hier).
Daarom moet men altijd proberen Crockford's script te gebruiken dat controleert of JSON geldig is alvorens het te evalueren. Link naar de script uitleg is te vinden hier en hier is een directe link naar het js bestand. Elke grote browser heeft hier tegenwoordig zijn eigen implementatie voor.
Voorbeeld van hoe de JSON parser te gebruiken (met de json uit bovenstaande code snippet):
//The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
//Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the json example)
alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};
De JSON parser biedt ook een andere zeer nuttige methode, stringify
. Deze methode accepteert een JavaScript object als parameter, en geeft een string terug met JSON formaat. Dit is handig voor wanneer je gegevens terug wilt sturen naar de server:
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
parse
en stringify
) nemen ook een tweede parameter, dat is een functie die zal worden aangeroepen voor elke sleutel en waarde op elk niveau van het uiteindelijke resultaat, en elke waarde zal worden vervangen door het resultaat van de door jou ingevoerde functie. (Meer hierover hier)
Btw, voor iedereen die denkt dat JSON alleen voor JavaScript is, kijk eens naar deze post die het tegendeel uitlegt en bevestigt.JSON is JavaScript Object Notation. Het is een veel compactere manier om gegevensverzamelingen over netwerkverbindingen te verzenden dan XML. Ik stel voor JSON te gebruiken in alle AJAX-achtige toepassingen waar XML anders de "recommended" optie zou zijn. De verbositeit van XML zal de downloadtijd en het bandbreedteverbruik ($$$) doen toenemen. Je kunt hetzelfde effect bereiken met JSON en de mark-up is bijna uitsluitend gewijd aan de gegevens zelf en niet aan de onderliggende structuur.
het algemene korte antwoord is: als je AJAX gebruikt om gegevensverzoeken te doen, kun je gemakkelijk objecten als JSON strings verzenden en terugsturen. Beschikbare extensies voor Javascript ondersteunen toJSON() aanroepen op alle javascript types voor het verzenden van gegevens naar de server in een AJAX verzoek. AJAX-reacties kunnen objecten als JSON-strings terugsturen die door een eenvoudige eval-aanroep in Javascript-objecten kunnen worden omgezet, bv. als de AJAX-functie someAjaxFunctionCallReturningJson terugstuurt
"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"
zou je in Javascript kunnen schrijven
var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);
JSON kan ook gebruikt worden voor web service payloads en dergelijke, maar het is echt handig voor AJAX resultaten.