【问题标题】:extract an object from from a JSON response in nodeJs从 nodeJs 中的 JSON 响应中提取对象
【发布时间】:2020-12-04 18:14:22
【问题描述】:

我正在像这样从 WebSocket 接收消息

ws.onmessage = (e) => {
       debugger
       if (e.data.startsWith('MESSAGE'))
           alert(JSON.stringify(e.data))
       ImageReceived(e.data)
       console.log(JSON.stringify(e.data))
   }

但是,消息被正确接收,但我在从消息中提取我想要的内容时遇到了一些困难。 消息如下,我想从消息中提取这部分:

{"physicalPath":"E:\\NORMAL\\person.jpeg","status":"Normal","version":47,"issuer":"gmail.com","id":32631}

消息的结构如下

"MESSAGE
expires:1607105481567
destination:/queue/f@gil.com
_type:com.model.Image
priority:9
message-id:ID:LA99343812-1:1:1:1:20
persistent:true
timestamp:1607105445567

{"physicalPath":"E:\\NORMAL\\person.jpeg","status":"Normal","version":47,"issuer":"gmail.com","id":32631}"

【问题讨论】:

  • 你可以试试var data = e.data.match(/{[^}]*}/)[0];
  • 非常感谢,这有效。但它导致了下一个问题:)。
  • 如何提取单个属性,例如我只想获取physicalPath属性,你知道如何获取吗?

标签: javascript node.js json websocket


【解决方案1】:

作为对您上一条评论的回应:您可以尝试将提取的字符串解析为实际对象

var data = JSON.parse(e.data.match(/{[^}]*}/)[0]);

或者(数据不是有效的 JSON)

var data = new Function("", "return " + e.data.match(/{[^}]*}/)[0])()

然后您可以像这样访问各个属性

data.physicalPath

【讨论】:

  • 这会返回:1 Uncaught SyntaxError: Unexpected token u in JSON at position 0
  • 可能是因为 JSON 不是有效的 JSON?
  • @Fadi 是的,试试替代版本(我刚刚更新了我的答案)。
猜你喜欢
  • 2021-01-23
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2023-01-12
  • 2013-08-07
  • 2021-03-26
  • 2019-04-17
  • 1970-01-01
相关资源
最近更新 更多