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

Gefangen
Gefangen 回复qq_35229216: 谢谢,已经解决了
5 个月之前 回复
qq_35229216
qq_35229216 悄悄的告诉你 你的代码没有问题 有问题的是你send了一个字符串 ‘这个消息是从服务器发送的’这个不是json格式的字符串,你在接收的时候通过转不是json的字符串就会报错了 如果你不喜欢看见红色的 你可以在把message换成<string>message
11 个月之前 回复

11个回答

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

Gefangen
Gefangen 我是在客户端将message对象转为字符串,然后在服务端接到之后在将字符串转回JSON对象
大约一年之前 回复

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

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

Gefangen
Gefangen 应该不是编码的问题,不过还是谢谢
大约一年之前 回复

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

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

Gefangen
Gefangen 谢谢你的建议,但是我尝试过还是不行
大约一年之前 回复

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

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

Gefangen
Gefangen 我是在客户端将message对象转为字符串,然后在服务端接到之后在将字符串转回JSON对象,我也尝试过在客户端直接send一个对象,然后在服务端接收这个对象,但也是不行
大约一年之前 回复

因为原则上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便知

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!