You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将格式异常的字符串化JSON转为JSON对象并提取Body值

提取非标准格式字符串中的Body值

首先,你拿到的这段字符串是Java对象的toString()输出,并非标准JSON或JS对象格式,所以直接用eval转对象的方式根本行不通。咱们换个思路,用正则表达式直接定位并提取Body的值,这是最直接可靠的方案。

原始消息内容

(Body:'3886' MessageProperties [headers={}, timestamp=null, messageId=null, userId=null, receivedUserId=null, appId=null, clusterId=null, type=null, correlationId=null, correlationIdString=null, replyTo=null, contentType=application/x-java-serialized-object, contentEncoding=null, contentLength=0, deliveryMode=null, receivedDeliveryMode=PERSISTENT, expiration=null, priority=0, redelivered=false, receivedExchange=, receivedRoutingKey=bottomlesspit, receivedDelay=null, deliveryTag=62, messageCount=0, consumerTag=amq.ctag-sCwfLaMEqWp2GkFwFrY1yg, consumerQueue=bottomlesspit])

解决方案:正则提取

直接用正则匹配Body:'xxx'的固定结构,捕获单引号内的内容即可:

// 假设d.body就是你获取到的完整字符串
const messageContent = d.body;
// 正则表达式:匹配Body:'后面的内容,直到遇到下一个单引号
const bodyRegex = /Body:'([^']+)'/;
const matchResult = messageContent.match(bodyRegex);

if (matchResult) {
  const bodyValue = matchResult[1];
  console.log('Body的值:', bodyValue); // 输出:3886
} else {
  console.log('未找到Body字段');
}

为什么你的原有代码行不通?

你原来尝试的eval('{' + d.body + '}')会直接报错,因为这段字符串的格式完全不符合JS对象字面量规则:

  • 整体开头是括号,不是对象的{}结构
  • MessageProperties [headers={}]这种写法在JS里属于非法语法
  • 大量键值对没有用冒号、逗号等符合JS规范的符号分隔

所以转对象的思路不适用,直接用正则提取目标字段才是高效的正确路径。

内容的提问来源于stack exchange,提问作者Gandalf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:20:44