无法正确解析通过网络发送的字符串化 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 无法正确解析

尝试使用 swiftyJSON 快速解析 JSON

JsonReader 无法正确解析字符串数组

从 Typescript 解析 JSON 恢复数据成员但不恢复类型:无法在结果上调用方法

VS调试:字符串中的字符无效

json 解析不正确