Objets JSON et Objets Javascript

Je crée un front-end d'une application Web. Je reçois toutes les réponses dans JSON, en analysant et en la mettant en tant que html. J'ai examiné quelques cadres MVC javascript (c.-à-d. Backbone.js, ember.js etc.) et j'ai constaté qu'ils n'avaient que trop de succès pour ma simple application. Mais ce que j'ai trouvé vraiment fascinant, c'est qu'ils avaient tous des modèles. J'ai compris que je peux créer des objets javascript et qu'ils seront similaires aux modèles et que je n'ai pas de besoins complexes, mes objets javascript personnalisés doivent être faciles à créer.

function displayCar() { var result = "A Beautiful " + this.year + " " + this.make + " " + this.model; pretty_print(result); } function Car(make, model, year, owner) { this.make = make; this.model = model; this.year = year; this.owner = owner; this.displayCar = displayCar; } 

Je reçois les voitures en tant que réponse JSON du serveur. Alors, quelle serait la manière idéale: créer les objets en bouclant le tableau JSON OU dois-je simplement utiliser l'analyse et afficher directement le html à partir de là?

Maintenant, ma question est-ce que dois-je analyser le JSON dans des objets javascript? Je ne suis pas sûr de savoir si l'utilisation de ce genre d'objets serait très utile? Je voudrais également savoir s'il existe un moyen de créer des objets prédéfinis personnalisés directement à partir de JSON, car je me sens que cela pourrait être utile car je veux des objets de voiture

La plupart des cadres javascript modernes (jquery, angular, knockout, etc.) analyseront la représentation de la chaîne dans les objets pour vous, ce n'est pas une étape dont vous devez vous inquiéter.

Vous n'avez pas besoin de pré-définir quoi que ce soit, javascript est une langue libre de dactylographie – les définitions de classe ne sont pas requises. Essentiellement, un objet JSON est un grand dictionnaire de noms de propriétés en valeurs, votre structure Web est responsable de la sérialisation de l'objet côté serveur dans une représentation compatible JSON.

En ce qui concerne le moment où vous devez afficher les données de retour, je pense que cela dépend de l'application que vous construisez. Si vous avez besoin d'accès aux voitures indéfiniment, il est logique d'itérer sur eux et d'ajouter des méthodes si nécessaire, mais si vous voulez simplement afficher les données, faites-le lorsque vous le recevez.

Tout cela veut dire, renvoyez vos objets du serveur et accédez directement à l'objet et aux propriétés.

Il s'agit d'une méthode dans la classe de contrôleur, qui répond à une URL (pseudo-code)

 public class Car { string make; string model; string year; string owner; } [Get("http://server/cars")] public Car[] getCars() { // the repository returns an array of Car objects, which in turn are returned to the client return myCarRepository.List(0, 25); // always page lists } 

Ensuite, sur le client

 jQuery .get("/server/cars") .success(function(carArray) { // carArray is an array of car objects that has been deserialized by jquery // you can access the properties using dot syntax console.log("server returned " + carArray.length + " cars"); for (var i = 0; i < carArray.length; i++) { console.log("car[" + i + "].make = " + carArray[i].make); carArray[i].print = displayCar; // if you want to hold on to the array, and display info later, each object in the array has a print() method } }); 

Je fais des suppositions pour répondre à vos questions. S'il vous plaît, dites-moi si quelqu'un a tort et je vais modifier la question de manière appropriée.

Question

Je reçois les voitures en tant que réponse JSON du serveur. Alors, quelle serait la manière idéale: créer les objets en bouclant le tableau JSON OU dois-je simplement utiliser l'analyse et afficher directement le html à partir de là?

Répondre

Si vous souhaitez ajouter des méthodes à chaque objet sur le tableau, vous avez besoin de la «classe» prédéfinie.

Question

Dois-je analyser le JSON dans des objets javascript?

Répondre

Vous devrez analyser le JSON dans un objet JavaScript uniquement pour utiliser les données.

Question

L'utilisation de ce genre d'objets serait très utile?

Répondre

Si vous faites référence à des objets Javascript, ils sont vraiment utiles et flexibles. Vous pouvez utiliser directement les propriétés définies sur le JSON à partir de l'objet Javascript après avoir été analysées.

Supposons un ensemble d'objets tirés de JSON, comme suit:

 JSON_ARRAY = [ { "make": "ACME inc", "model": "road runner 9999", "year": "the future", "owner": "nobody" }, // more cars here... ] 

Vous pouvez accéder à chaque voiture via JSON_ARRAY[n] , où n est l'index de la voiture dans le tableau.

Vous pouvez également ajouter votre méthode displayCar à chaque objet sur le JSON_ARRAY

 for (var i = 0; i < JSON_ARRAY.length; i++) { JSON_ARRAY.displayCar = displayCar; } 

Question

Je voudrais également savoir s'il existe un moyen de créer des objets prédéfinis personnalisés directement à partir de JSON, car je me sens comme utile pour les objets de voiture.

Répondre

Non, il n'existe aucun moyen de pré-définir une "classe" de JSON. Vous pouvez définir une classe conçue pour s'adapter à une représentation JSON elle-même, si vous le souhaitez.

 function Car( car_json ) { this.make = car_json.make; this.model = car_json.model; this.year = car_json.year; this.owner = car_json.owner; } Car.prototype.displayCar = function() { // stuff } 

Ou encore mieux:

 function Car( json_data ) { for( var property in json_data ) { this[ property ] = json_data[ property ]; } } 

Quoi qu'il en soit, vous devrez mapper le tableau d'objets à un ensemble de voitures:

 var cars = JSON_CARS_ARRAY.map(function jsonToCar( json ) { return new Car( json ); });