Javascript JSON.parse意外令牌节点
使用Javascript JSON.parse意外令牌节点,javascript,json,node.js,Javascript,Json,Node.js,使用client.on('data',function(data){})节点套接字传入以下数据: { "jsonrpc": "2.0", "result": { "Name": "MyGain", "Controls": [ { "Name": "gain", "String": "-18.0dB",
client.on('data',function(data){})
节点套接字传入以下数据:
{
"jsonrpc": "2.0",
"result": {
"Name": "MyGain",
"Controls": [
{
"Name": "gain",
"String": "-18.0dB",
"Value": -18,
"Position": 0.68333333
},
{
"Name": "mute",
"String": "unmuted",
"Value": 0,
"Position": 0
}
]
},
"id": "upd"
}
使用JSON.parse(data)
会导致uncaughtsyntaxerror:JSON中的意外标记位于位置201
如果我直接把绳子传过去,一切都很好
提前谢谢#
编辑1:
我的代码:
this.client = new net.Socket();
this.client.setEncoding('utf8');
this.client.on('data', function(data) {
console.log('raw:' + data);
var dataj = JSON.parse(data);
// console.log(b);
if (dataj.id == "upd") {
console.log("UPDATE MESSAGE");
} else {
console.log('unknown:' + data);
}
// client.destroy(); // kill client after server's response
});
如果:
this.client = new net.Socket();
this.client.setEncoding('utf8');
this.client.on('data', function(data) {
console.log('raw:' + data);
var dataj = JSON.parse({"jsonrpc":"2.0","result":{"Name":"MyGain","Controls":[{"Name":"gain","String":"-65.0dB","Value":-65.0,"Position":0.29166665},{"Name":"mute","String":"unmuted","Value":0.0,"Position":0.0}]},"id":"upd"});
// console.log(b);
if (dataj.id == "upd") {
console.log("UPDATE MESSAGE");
} else {
console.log('unknown:' + data);
}
// client.destroy(); // kill client after server's response
});
编辑2:
连接到本地套接字服务器的电子环境。无法控制服务器输出请使用以下命令:
this.client = new net.Socket();
this.client.setEncoding('utf8');
this.client.on('data', function(data) {
console.log('raw:' + data);
var dataj = data
// console.log(b);
if (dataj.id == "upd") {
console.log("UPDATE MESSAGE");
} else {
console.log('unknown:' + data);
}
// client.destroy(); // kill client after server's response
});
JSON.parse工作正常。您能否使用顶部的
图标创建一个代码段,以便我们可以复制此问题?它在节点中运行,需要套接字连接,我已在editBetter中将完整代码附加到console.log(data)
,以查看数据到底是什么。一个字符串正好包含上面引用的块代码或…?我试图解码的JSON片段直接从控制台复制。将控制台打印复制到静态变量中时,所有操作都正常。在这一行之后console.log('raw:'+data)
你能告诉我console.log('typeof:'+typeof data)的输出吗所以我不理解的是,由于它已经是正确的格式,通过重新分配变量JS,它会自动创建为对象吗?但是,执行上述操作时,结果始终为未知大小写,并且dataj类型仍然为stringdata。stringdata的格式已经正确,您可以直接使用它,而无需解析,也无需dataj this.client.on('data',function(data){if(data.id==“upd”){console.log(“UPDATE MESSAGE”);}else{console.log('unknown:'+data);});按照你说的做,当我简单地console.log(data.id)时,我得到了unfinedy你可以console.dir(data)并且你可以看到你的数据的属性,可能是数据havent和名为idconsole.dir(data)的属性,并将结果发送给我