0

这是一个游戏应用程序。在我的游戏中,我想在我的数据库的单个字段中保存对玩家的特殊效果。我知道我可以只放一个参考 ID 并做另一张桌子,我还没有取消这个选项。编辑:(添加信息)这是用于节点中的服务器而不是浏览器。

我考虑存储数据的方式是作为 javascript 对象,如下所示:

effects={
           shieldSpell:0,
           breatheWater:0,
           featherFall:0,
           nightVision:0,
           poisonResistance:0,
           stunResistance:0,
           deathResistance:0,
           fearResistance:0,
           blindResistance:0,
           lightningResistance:0,
           fireResistance:0,
           iceResistance:0,
           windResistance:0}

将其存储为字符串并使用 effects=eval(effectsString) 似乎很容易 有没有一种简单的方法可以使它成为一个字符串,或者我必须这样做:

effectsString=..."nightVision:"+effects.nightVision.toString+",poisonResistance:"+...
4

4 回答 4

7

像这样序列化:

JSON.stringify(effects);

像这样反序列化:

JSON.parse(effects);
于 2012-08-07T14:36:17.243 回答
2

使用JSON.stringify

这会将 JS 对象转换为JSON。然后,您可以使用JSON.parse轻松反序列化它。不要使用该eval方法,因为它会邀请跨站点脚本

//Make a JSON string out of a JS object
var serializedEffects = JSON.stringify(effects);
//Make a JS object from a JSON string
var deserialized = JSON.parse(serializedEffects);
于 2012-08-07T14:36:59.207 回答
0

JSON 解析和字符串化是我用于这种类型的存储

var storeValue = JSON.stringify(effects); //stringify your value for storage
// "{"shieldSpell":0,"breatheWater":0,"featherFall":0,"nightVision":0,"poisonResistance":0,"stunResistance":0,"deathResistance":0,"fearResistance":0,"blindResistance":0,"lightningResistance":0,"fireResistance":0,"iceResistance":0,"windResistance":0}"
var effects = JSON.parse(storeValue);  //parse back from your string
于 2012-08-07T14:37:41.067 回答
0

到目前为止,这是我想出的,只是想知道这个解决方案的缺点是什么。

        effectsString="effects={"
        for (i in effects){
           effectsString=effectsString+i+":"+effects[i]+","
        }
        effectsString=effectsString.slice(0,effectsString.length-1);
        effectsString=effectsString+"}"

然后使对象只是

eval(effectsString)
于 2012-08-07T14:47:23.663 回答