Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何仅对Javascript对象的一部分进行JSON编码?_Javascript_Json_Javascript Objects_Stringify - Fatal编程技术网

如何仅对Javascript对象的一部分进行JSON编码?

如何仅对Javascript对象的一部分进行JSON编码?,javascript,json,javascript-objects,stringify,Javascript,Json,Javascript Objects,Stringify,我正在写一个2D重力模拟游戏,我正在尝试添加保存/加载功能。在游戏中,我将当前所有行星存储在一个数组中。每个行星都由一个包含行星坐标、质量和运动矢量的天体表示。它还存储了行星最后100个坐标的数组,以便在屏幕上绘制行星的轨迹 我想使用JSON.stringify()来序列化planets数组。我想保存每个行星的第一个属性(质量、位置、运动),但不需要保存最后100个坐标(轨迹数组)。我不想完全删除坐标,否则轨迹将从屏幕上消失。我可以只对每个对象的一部分进行字符串化吗?如果没有,我可以在JSON字

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

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

试试这种方法

var saved = JSON.stringify( {mass:body.mass,location:body.location,motion:body.motion} );
它将以json字符串的形式提供这三个部分

再扩展一点,您可以提供body类这样的导出函数。 例如:

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() );
Bodyclass.export=函数(toexport){
if(未定义===toexport | | toexport.constructor!=数组){
var-toexport=[‘质量’、‘位置’、‘运动’];
}
var export={};
对于(变量i=0;i
最好同时创建序列化和反序列化方法。这将允许您创建最有效的存储格式,同时还允许您根据需要重建尽可能多的对象。 您可以使用导出/导入、保存/还原、序列化/反序列化术语,以您认为合适的术语为准。
拥有这样的方法也会提高长期的可维护性。

在现代web浏览器中,您可以使用


或者,相当于使用
for
循环。

只需创建新对象,包含所需字段,并将其json。。。
var serialized = JSON.stringify(planets.map(function(planet){
  return { 
    mass: planet.mass,
    location: planet.location,
    motion: planet.motion
  };
}));