JSON没有正确序列化…我想?
我有一个使用socket.io的Node.js项目。 在这里,我尝试从客户端发送一个对象到服务器,像这样: socket.send(JSON.stringify({'type':'msg','message':'test'}));
当它到达服务器时,我调用JSON.parse
,并检查object.type == 'msg'
。 当我运行代码并调用console.log(object.type)
它返回"msg"
,但object.type == 'msg'
返回false。 这里发生了什么?
编辑:
代码失败的相关部分是:
client.on('message', function(message, client){ var envelope = JSON.parse(message); console.log(envelope.type); if(envelope.type == "msg") { console.log("yay!"); } }
每当一个消息进来, msg
打印,但不是yay!
。
您是否已经尝试在您的JSON消息中使用非文字作为键? 我正在构build一个小型聊天服务器来探索socket.io,使用JSON消息。 这是我的相关代码:
客户端:
var jsonMsg = { action: 'SEND', body: msg, name: name.val() }; socket.send(JSON.stringify(jsonMsg));
请注意,msg和name.val()都是string值,从相应的input字段中获取。
服务器端:
client.on('message', function(m, c) { // parse message var msg = json.parse(m); switch (msg.action) { case 'SEND': // send message to channel var broadCast = { posted: date.toReadableDate(new Date(), 'timestamp'), message: msg.body, name: msg.name }; socket.broadcast(json.stringify(broadCast)); break; } });
注意: toReadableDate
是一个自定义的原型方法。
该消息作为广播在服务器端和客户端正确接收。
也许这是一个节点错误? 我刚刚在0.5.0-pre中试过,并且在有限的情况下工作正常。
> message = JSON.stringify({'type':'msg','message':'test'}) '{"type":"msg","message":"test"}' > var envelope = JSON.parse(message); > console.log(envelope.type); msg > if(envelope.type == "msg") { console.log("yay!"); } yay!
其他选项可能是一个编码问题(在terminal上看起来像“味精”,但不是严格意义上的那些字符?)
您的邮件必须采用格式“{”键入“:”msg“}”。