【问题标题】:I am not able to convert a string into a jasvascript object我无法将字符串转换为 javascript 对象
【发布时间】:2014-12-02 04:03:18
【问题描述】:

也许这是一个简单的话题,但我一直在尝试,但我无法做到这一点。我想将字符串转换为 javascript 对象。从现在开始,我尝试了多种形式来解决它。我正在使用节点,我想发出 AJAX 请求,服务器端必须获取请求变量并转换为 javascript 对象(使用其他对象进行扩展)。我向你展示我的代码是怎样的:


客户

var data = '{"addresses":"hola"}';
// make more and more. 
makeTheRequest("POST",'users/update',"param="+JSON.stringify(data),'json',onSuccess, onError);

服务器

var param = eval('{' + req.body.param + '}');
console.log("\nuser.js-> router.post-> eval: " + param);
console.log("\nuser.js-> router.post-> req.param: " + req.body.param);
console.log("\nuser.js-> router.post-> JSON.parse: " + JSON.parse(req.body.param));
console.log("\nuser.js-> router.post-> user: " + req.session.user);
/*TODO: save on the database.... and more*/
res.send({success:0, error:1, result:"No USER. No SESSION"});

最终服务器日志结果

user.js-> router.post-> eval: {"addresses":"hola"}  
user.js-> router.post-> req.param: "{\"addresses\":\"hola\"}"  
user.js-> router.post-> JSON.parse: {"addresses":"hola"}  
user.js-> router.post-> user: [object Object]  

我要做的是调用 exentd 函数来合并两个对象,例如:req.session.user = extend(false, req.session.user, param);,但是参数的处理方式就像一个字母一个字母的数组-> 1:{, 2:", 3:a, 4:d, 5:d, 6:r, 7:e, 8:s, 9:s.. . 知道我做错了什么吗? 非常感谢。

【问题讨论】:

  • 首先,当data 已经是JSON 文本时,为什么还要调用JSON.stringify(data)

标签: javascript json node.js object extend


【解决方案1】:

您将数据编码为 JSON 两次(在您的示例中,data 是一个包含 JSON 的字符串),因此您必须 解析 两次。更好的解决方案是只编码一次并解析一次。

事实

console.log("\nuser.js-> router.post-> JSON.parse: " + JSON.parse(req.body.param));

产生

user.js-> router.post-> JSON.parse: {"addresses":"hola"}

告诉你JSON.parse的返回值仍然是一个字符串(包含JSON),而不是一个对象。

【讨论】:

  • 非常感谢@FelixKing...我解决了擦除 JSON.stringify(data) 的问题,并在调用 ajax 函数时只保留数据。
猜你喜欢
  • 2020-01-13
  • 2020-08-04
  • 2013-06-28
  • 2019-11-04
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多