Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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对象保存为字符串_Javascript_Mysql - Fatal编程技术网

将javascript对象保存为字符串

将javascript对象保存为字符串,javascript,mysql,Javascript,Mysql,这是一个游戏应用程序。 在我的游戏中,我想在数据库的单个字段中保存对玩家的特殊效果。我知道我可以把一个引用Id放在另一张桌子上,但我没有把这个选项从桌子上去掉。 编辑:添加的信息这是节点中我的服务器的信息,而不是浏览器的信息 我考虑将数据存储为javascript对象的方式如下: effects={ shieldSpell:0, breatheWater:0, featherFall:0, nightVisi

这是一个游戏应用程序。 在我的游戏中,我想在数据库的单个字段中保存对玩家的特殊效果。我知道我可以把一个引用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=evalefectstring使用似乎很容易 有没有一种简单的方法可以让它成为一个字符串,或者我必须这样做:

effectsString=..."nightVision:"+effects.nightVision.toString+",poisonResistance:"+...
像那样序列化:

JSON.stringify(effects);
JSON.parse(effects);
像这样反序列化:

JSON.stringify(effects);
JSON.parse(effects);
使用

将JS对象转换为。然后,您可以轻松地使用反序列化。不要使用eval方法,因为这是一种邀请


JSON解析和stringify是我用于这种类型的存储的

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

这是我到目前为止提出的解决方案的缺点

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

eval(effectsString)

我正在服务器上的节点中执行此操作。如果XSS攻击不在浏览器上,我是否需要担心它?@Shawn如果输入从未来自客户端,那么在服务器上就不必担心它。但是,没有理由不使用JSON.parse,因为它不需要启动新的JS执行上下文,所以应该会更快o@Shawn,您是否使用JSON.stringify序列化了它?如果您这样做了,就不可能得到SyntaxerError。使用eval是否有效?这通常是因为如果你自己序列化了属性,它就不会用双引号引起来。不,我这样做了,得到了错误。如果需要,请复制到js控制台。影响={护盾法术:0,呼吸水:0,羽毛坠落:0,夜视:0,毒药抗性:0,眩晕抗性:0,死亡抗性:0,恐惧抗性:0,失明抗性:0,光明抗性:0,火焰抗性电阻:0,冰电阻:0,风电阻:0};JSON.stringifyeffects;parsedString=JSON.parseeffects;SyntaxError:Unexpected token您的服务器端语言是什么?您是否考虑过将用户数据保存为XML文件并将文件名添加到用户表中?XML是存储结构化数据的正确方法,您甚至可以设置它的样式并使其在brawser visualization上呈现preatty。Wh如果您将xml保存在服务器上,您只需打开它并调用类似json_Ecode的东西,然后再将其返回到客户端,就可以了!服务器在node.js中运行,并通过mySQL与数据库通信。然后您应该尝试使用CouchDB,它是一个非mySQL数据库,可以存储json对象,这样您就不必将其转换为string-我在尝试hat时得到了这个结果…SyntaxError:意外标记oDo您在stringify或parse上得到了这个错误吗?更具体地说,请仅在我解析时得到错误,我在java脚本控制台中使用了上述数据。上面的对象效果不是JSON对象。因此您得到了一个错误。JSON.parseJSON.stringifyeffects应该工作得很好,您知道吗ght也希望接受这个答案,如果它适合你的话。缺点是你正在重新发明轮子。另外,使用slice删除最后一个逗号是非常不雅观的。此外,如果你的任何属性包含需要像引号一样转义的值,这将失败。此外,使用eval设置变量也是不雅观的,即使你不得不使用在这个方法中,您可以使用effects=evaljsonstring,而不是在eval中设置一个变量。