4

我正在创建 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 创建自定义预定义对象,因为我觉得它可能有用,就像我想汽车对象一样

4

2 回答 2

1

大多数现代 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
   }
  });
于 2013-06-07T02:06:29.817 回答
1

我做了一些假设来回答你的问题。请告诉我是否有任何错误,我将相应地编辑问题。

问题

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

回答

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

问题

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

回答

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

问题

使用这种对象会很有帮助吗?

回答

如果您指的是 Javascript 对象,它们确实非常有用且灵活。您可以在解析后直接使用来自 Javascript 对象的 JSON 上定义的属性。

假设从 JSON 中获取一个 Objects 数组,如下所示:

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

您可以通过 访问每辆车JSON_ARRAY[n],其中n是数组中汽车的索引。

您还可以将您的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 );
});
于 2013-06-07T02:52:10.297 回答