无法正确解析通过网络发送的字符串化 Json
Posted
技术标签:
【中文标题】无法正确解析通过网络发送的字符串化 Json【英文标题】:stringified Json sent over network cannot be correctly parsed 【发布时间】:2019-08-05 09:51:28 【问题描述】:我尝试使用 typescript(在 nodejs 中运行)实现 websocket 服务器。
ws.on('message', (msg: string) =>
console.log("got message:" + msg);
const m = JSON.parse(msg);
console.log(m);
console.log(m.a);
另一方面,我使用 Angular 的 webSocket 客户端发送数据(使用网络浏览器),
socket.next( JSON.stringify(a: "123", b:"456") )
打印出来的是
got message:"\"a\":\"123\",\"b\":\"456\""
"a":"123","b":"456"
undefined
解析的对象不包含成员 a(使用 m["a"] 也是未定义的)。
但是,如果我只是写一个简单的 javascript,
const msg = "\"a\":\"123\",\"b\":\"456\""
const m = JSON.parse(msg);
console.log(m);
console.log(m.a);
我会得到结果的:
a: '123', b: '456'
123
json 解析有什么问题吗?谢谢。
【问题讨论】:
【参考方案1】:因为在某个地方你又把它串起来了,
如果你愿意console.log(typeof m)
你会得到'string'
let x = JSON.stringify(a: "123", b:"456")
console.log(JSON.parse(x).a)
let y = JSON.stringify(x)
console.log(JSON.parse(y).a)
所以只使用socket.next(a: "123", b:"456")
【讨论】:
【参考方案2】:是的,您基本上是在制作双字符串。 您实际上并不需要对 Angular WebSocket 进行字符串化。
const msg = JSON.stringify('"a":"123","b":"456"');
let m = JSON.parse(msg);
console.log(msg);
console.log(m);
console.log(m.a);
m = JSON.parse(JSON.parse(msg));
console.log(m);
console.log(m.a);
【讨论】:
以上是关于无法正确解析通过网络发送的字符串化 Json的主要内容,如果未能解决你的问题,请参考以下文章
Flutter DistanceMatrix JSON 无法正确解析