JSON字符串消息转换成Javascript的对象出错

我在写一个服务,想解决angular本地代理解决跨越问题,但是不知道为什么,在将JSON字符串消息转换成Javascript的对象时出错了。下面时是我的代码

 const server = app.listen(8000, "localhost", () => {
    console.log("服务器已启动,地址是:http://localhost:8000");
});

const subscriptions = new Map<any,number[]>();

const wsServer = new Server({port:8085});
wsServer.on("connection",websocket =>{
    websocket.send('这个消息是服务器主动推送的');
    websocket.on('message', message => {
        let messageObj = JSON.parse(message);  //这里报错了
        let productIds = subscriptions.get(websocket) || [];
        subscriptions.set(websocket, [...productIds,messageObj.productId]);
    });
});

图片说明

当我的angular项目从localhost:4200连接到localhost:8000时报错
图片说明

图片说明

控制台
图片说明

编译器为vscode

可以首先console.log(message);看下它的值是什么,如果返回的是json对象,就不需要进行转换了,直接使用。如果是数组那你先转换成json字符串JSON.stringify()之后然后在进行JSON.parse(); 说到底还是得看返回的massage是什么

编码的问题,你的中文编码识别不了,需要转换中文编码

你可以用英文试一下,转为UTF-8或者Unicode的编码

返回的json是字符串,不是json对象,可以服务端修改,返回json对象,或者客户端使用eval转换一下
http://www.cnblogs.com/hgmyz/p/7451461.html

你这返回的应该直接就是一个字符串类型,你可以在后台将他用JSONObject来包装一下,或者在前台直接用这个就可以

字符编码需要注意下,字符串需要转换的

返回的message,不能json.parse(),一般也就跟上面的几位说的一样,是message的问题。这里你可以打开浏览器的Network功能,找到对应的ajax请求,找到返回的message数据,用在线json转换(随便百度搜一个),把数据扔进去,json转换一下,看下是怎么报错的。针对错误,去修改返回的message,直达可以json转换。
这个问题,是后台数据问题。

因为原则上message是以字符串发出的,所以我是在客户端将message对象转为字符串,然后在服务端接到之后在将字符串转回JSON对象,以下是我在客户端的代码

 import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import 'rxjs/Rx';

@Injectable()
export class WebSocketService {
  ws:WebSocket;

  constructor() { }

  createObservableSocket(url:string, id:number) : Observable<any>{
    this.ws = new WebSocket(url);
    return new Observable<string>(
      observer =>{
        this.ws.onmessage = (event) => observer.next(event.data);
        this.ws.onerror = (event) => observer.error(event);
        this.ws.onclose = (event) => observer.complete();
        this.ws.onopen = (event) => this.sendMessage({productId:id});  //send的是一个对象
      }
    ).map(message => {JSON.parse(message)});
  }

  sendMessage(message:any){  //any表示send什么类型都可以
    this.ws.send(JSON.stringify(message));   //但原则上message是一个字符串,所以将message对象转为字符串发出去
  }

}

是不是json没有序列化的问题,需要把Json格式序列化为json对象结构体

json不合法,看下具体json便知

websocket.send('这个消息是服务器主动推送的');, 把这个去掉就好用了