JSON对象和Javascript对象

我正在创建一个Web应用程序的前端。 我收到JSON中的所有响应,解析它并将其作为html。 我看了几个javascript MVC框架(即backbone.js,ember.js等),发现它们对我的简单应用程序来说太过分了。 但我发现真正令人着迷的是他们都有模特。 我想我可以创建javascript对象,它们将类似于模型,因为我没有这样复杂的需求,我的自定义javascript对象应该很容易。

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; } 

我从服务器接收汽车作为JSON响应。 那么什么是理想的方式:在循环JSON数组时创建对象或者我应该只使用解析并直接从那里显示html?

现在我的问题是我应该将JSON解析为javascript对象吗? 我也不确定使用这种物体是否会有所帮助? 我还想知道是否有一种直接从JSON创建自定义预定义对象的方法,因为我觉得它可能比我想要汽车对象更有用

大多数现代的javascript框架(jquery,angular,knockout等)都会将字符串表示解析为对象,这不是你需要担心的一个步骤。

您不需要预先定义任何内容,javascript是一种松散类型的语言 – 不需要类定义。 本质上,JSON对象是属性名称到值的大型字典,您的Web框架负责将服务器端对象序列化为JSON兼容表示。

关于何时需要显示返回数据,我认为这取决于您正在构建的应用程序。 如果您需要无限期地访问汽车,那么迭代它们并根据需要添加方法可能是有意义的,但是,如果您只想显示数据,请在收到时执行。

这就是说,只需从服务器返回对象,直接访问对象和属性。

这是控制器类中的一个响应URL的方法(伪代码)

 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 } 

然后在客户端上

 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 } }); 

我做了一些回答你的问题。 如果有任何问题请告诉我,我会根据问题编辑问题。

我从服务器接收汽车作为JSON响应。 那么什么是理想的方式:在循环JSON数组时创建对象或者我应该只使用解析并直接从那里显示html?

回答

如果要为arrays上的每个对象添加一些方法,则需要这些预定义的“类”。

我应该将JSON解析为javascript对象吗?

回答

您必须将JSON解析为javascript对象才能使用数据。

使用这种物体会有很大帮助吗?

回答

如果您正在引用Javascript对象,那么它们非常有用且灵活。 您可以在解析后直接使用Javascript对象中JSON上定义的属性。

使用从JSON获取的对象数组,如下所示:

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

你可以通过JSON_ARRAY[n]访问JSON_ARRAY[n] ,其中n是arrays中汽车的索引。

您还可以将displayCar方法添加到JSON_ARRAY上的每个对象

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

我还想知道是否有一种直接从JSON创建自定义预定义对象的方法,因为我觉得它可能比我想要的汽车对象更有用。

回答

不,没有办法从JSON预先定义“类”。 如果需要,您可以定义一个旨在适应自身JSON表示的类。

 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 } 

甚至更好:

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

无论如何,您必须将对象数组映射到Cars数组:

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