Node.js:在客户端处理JSON对象
Node.js: handle JSON object in client side
在使用socket.io
的Node.js
服务器的客户端处理JSON
对象时遇到问题。
这就是我发送数据的方式(我正在读取的文件具有JSON格式):
io.on('connection', function(socket){
console.log("A user connected");
fs.readFile('/.../file.json', 'utf-8', function(err, data){
socket.emit('news', JSON.stringify(data));
});
socket.on('disconnect', function(){
console.log("A user disconnected");
});
});
我调用JSON.stringify
是为了给二进制data
一个可读的格式。
现在,在客户端,我在html的<body>
:中有以下<script>
块
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io();
socket.on('news', function(data){
var obj= JSON.parse(data);
$("#json").text(obj);
});
</script>
这运行得很好,我有一段<p id="json"></p>
,它占用了整个文本块,但如果我试图访问解析的JSON的一个元素并打印它,例如使用console.log(obj.timestamp)
的"时间戳"标记,我会得到undefined
。
如何处理接收到的数据,以便将其作为常规JSON进行处理?
编辑
这是console.log(obj)
:的输出
{
"timestamp": "Wed Aug 27 13:14:01 CEST 2014",
"devices": [
{
"A": {
"mac": "00:07:80:68:18:41",
"handles": [
{
"TxHandler1": "0418",
"TxHandler2": "020f00072a",
"TxHandler3": "bd",
"a": {
"hnd": "0x0010",
"uuid": "00002800-0000-1000-8000-00805f9b34fb",
"value": "0a 18 "
},
"b": {
"hnd": "0x0011",
"uuid": "00002803-0000-1000-8000-00805f9b34fb",
"value": "02 12 00 29 2a "
},
"c": {
"hnd": "0x0012",
"uuid": "00002a29-0000-1000-8000-00805f9b34fb",
"value": "56 4c "
},
"d": {
"hnd": "0x0013",
"uuid": "00002901-0000-1000-8000-00805f9b34fb",
"value": "46 41 "
},
"e": {
"hnd": "0x0014",
"uuid": "00002803-0000-1000-8000-00805f9b34fb",
"value": "02 15 00 24 2a "
},
"f": {
"hnd": "0x0015",
"uuid": "00002a24-0000-1000-8000-00805f9b34fb",
"value": "31 31 "
},
"g": {
"hnd": "0x0016",
"uuid": "00002901-0000-1000-8000-00805f9b34fb",
"value": "4d 4f 44 "
}
}
]
}
},
{
"B": {
"mac": "00:07:80:68:18:8E",
"handles": [
{
"TxHandler1": "0418",
"TxHandler2": "020f00072a",
"TxHandler3": "bd",
"a": {
"hnd": "0x0010",
"uuid": "00002800-0000-1000-8000-00805f9b34fb",
"value": "0a 18 "
},
"b": {
"hnd": "0x0011",
"uuid": "00002803-0000-1000-8000-00805f9b34fb",
"value": "02 12 00 29 2a "
},
"c": {
"hnd": "0x0012",
"uuid": "00002a29-0000-1000-8000-00805f9b34fb",
"value": "56 4c "
},
"d": {
"hnd": "0x0013",
"uuid": "00002901-0000-1000-8000-00805f9b34fb",
"value": "46 41 "
},
"e": {
"hnd": "0x0014",
"uuid": "00002803-0000-1000-8000-00805f9b34fb",
"value": "02 15 00 24 2a "
},
"f": {
"hnd": "0x0015",
"uuid": "00002a24-0000-1000-8000-00805f9b34fb",
"value": "31 31 "
},
"g": {
"hnd": "0x0016",
"uuid": "00002901-0000-1000-8000-00805f9b34fb",
"value": "4d 4f 44 "
}
}
]
}
}
]
}
根据JSONLint的说法,它是一个有效的JSON,但当我尝试访问"时间戳"标签
undefined
客户端和服务器之间不应该有任何关系。事实上,您使用的node.js恰好是JavaScript,这应该与客户端无关。
如果您在C#或Java中执行了相同的操作,这对客户端有意义吗?
最重要的是,步骤1应该是验证客户端上是否正确接收到JSON对象。然后,使用JSON Lint等验证器确保JSON是一个有效的对象。如果它无效,那么问题出在服务器端。如果没有,则需要检查客户端的解析。
我发送了错误的数据格式,正确的代码是:
io.on('connection', function(socket){
console.log("A user connected");
fs.readFile('/.../file.json', 'utf-8', function(err, data){
socket.emit('news', data.toString());
});
socket.on('disconnect', function(){
console.log("A user disconnected");
});
});
相关文章:
- 处理JSON字符串会导致JavaScript错误
- 使用JavaScript处理JSON数据
- 在谷歌应用引擎上用jQuery处理json表单
- 如何处理json编码的php-mysql数组
- 如何处理JSON后响应
- 处理json文件,如何访问对象数组
- 如何处理JSON错误消息
- 可以't让select2处理json文件
- 如何使用Bloodhound让Typeahead处理JSON响应
- 如何处理 JSON 响应
- 如何使用 Angular 处理 JSON 文件加载
- 解析“流式处理”JSON
- 使用 Jquery 处理 json 对象
- 如何正确处理JSON和HighCharts中的日期对象
- 在angularjs中处理json响应(来自PHP和mysql)
- 最好用Java或Javascript处理JSON
- 处理JSON.parse()中不可解析输入的异常
- 在Python服务器上处理JSON对象会导致'列表'对象没有属性'读取'错误
- 如何处理json并在node.js中写入文件
- AngularJS:如何预处理json数据