JSON如何只编码Javascript对象的一部分?

时间:2013-01-05 23:52:46

标签: javascript json javascript-objects stringify

我正在编写2D重力模拟游戏,我正在尝试添加保存/加载功能。在游戏中,我将所有当前行星存储在一个数组中。每个行星都由一个Body对象表示,该对象包含行星的坐标,质量和运动矢量。它还存储了行星最后100个坐标的数组,以便在屏幕上绘制行星的踪迹。

我想使用JSON.stringify()来序列化行星数组。我想保存每个行星的第一个属性(质量,位置,运动),但我不需要保存最后100个坐标(轨迹数组)。我不想完全删除坐标,否则轨迹将从屏幕上消失。我可以只对每个对象的一部分进行字符串化吗?如果没有,我可以在编码后删除那部分JSON字符串吗?或者我应该在保存过程中将坐标移动到其他位置,然后在保存后将它们复制回每个行星?

3 个答案:

答案 0 :(得分:2)

在现代网络浏览器中,您可以使用Array#map

var serialized = JSON.stringify(planets.map(function(planet){
  return { 
    mass: planet.mass,
    location: planet.location,
    motion: planet.motion
  };
}));

或者,等效使用for循环。

答案 1 :(得分:0)

以这种方式试试

var saved = JSON.stringify( {mass:body.mass,location:body.location,motion:body.motion} );

它只会给你三个部分作为json字符串。

稍微扩展一下,你可以为你的身体类提供这样的导出功能。 例如:

Bodyclass.export = function( toexport ) {
    if ( undefined === toexport || toexport.constructor != Array ) {
        var toexport = [ 'mass', 'location', 'motion' ];
    }
    var export = {};
    for ( var i = 0; i < toexport; i++) {
        export[ toexport[ i ] ] = this[ toexport[ i ] ];
    ]
}

var saved = JSON.stringify( body.export() );

答案 2 :(得分:0)

最好的方法是创建序列化和反序列化方法。这将允许您创建最有效的存储格式,同时仍允许您根据需要重建尽可能多的对象。 您可以使用导出/导入,保存/恢复,序列化/反序列化术语,无论您认为合适。 拥有这样的方法也可以提高长期的可维护性。