如何使用JSON格式创建特定类型的Javascript对象?

时间:2013-01-25 20:11:55

标签: javascript json

我想将地图边界存储在JSON对象中。为了完成代码,我使用JSDoc声明了对象:

/**
 * @name MapBounds
 * @class MapBounds
 * This class represents a map boundary definition.
 *
 * @property {number} minLat Specifies the minimum latitude of the boundary.
 * @property {number} minLon Specifies the minimum longitude of the boundary.
 * @property {number} maxLat Specifies the maximum latitude of the boundary.
 * @property {number} maxLon Specifies the maximum longitude of the boundary.
 */

当创建MapBounds对象时,我的代码看起来与此类似(此示例没有真正的lat / lon值):

var newMapBounds = MapBounds( {minLat: 50, minLon: 50, maxLat: 100, maxLon: 100} );

我使用JSON指定对象,然后将其转换为我需要的类型。有更好的方法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

以下是如何使用该格式构建Json对象(它只是一个JavaScript对象文字)

{
 minLat: 0, // Specifies the minimum latitude of the boundary
 minLon: 0, // Specifies the minimum longitude of the boundary
 maxLat: 0, // Specifies the maximum latitude of the boundary
 maxLon: 0  // Specifies the maximum longitude of the boundary
}

在将Json对象提交到Web服务时,必须将其“映射”到类中。如果将JSON对象传递给请求并提供对象类型作为Web服务参数,则某些框架(即MVC .NET)将为您执行此操作。尽管如此,上述格式是您在JavaScript方面表示该结构的方式。

编辑:这种从JSON对象到服务器端代码上的指定类的映射要么发生在您在服务器上使用的框架(即.NET / MVC),要么就是您在服务器上手动执行。一旦您将JSON对象提交给服务器,服务器端代码就会接管,您不需要在客户端(即JavaScript)上记录这方面的内容

答案 1 :(得分:0)

首先,JavaScript中没有类。通过调用函数来初始化对象来创建对象,并且继承基于原型链。见https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Inheritance_and_the_prototype_chain

JSON只能存储没有原型链的普通对象,即用JSON编码的所有对象都只从Object继承。

因此可以得出结论,从JSON创建某些类型的对象的唯一方法是使用自编写的函数来处理由反序列化JSON产生的普通对象。然后,自编函数将使用new …调用构造函数来重建原型链。这似乎就是你已经在做的事情,而且就是这样。

您可以使用一些执行上述步骤的框架来避免手动处理序列化。