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

JavaScript中如何将特殊格式字符串转换为JSON?

转换非标准设备数据字符串为JSON的可行方案

你拿到的是类JSON格式的非标准字符串,不符合JSON规范的点包括:对象属性名无引号、用=替代:、存在HTML转义的引号\",所以直接用JSON.parse()会失败。以下是分步解决的代码方案:

处理步骤

  1. 还原HTML转义的引号,将\"替换为标准双引号"
  2. 给所有对象属性名添加双引号,并将属性名后的=替换为:(精准匹配,避开值中的等号)
  3. 修正数组关联键的格式(比如dataOrList= → "dataOrList":)
  4. 清理冗余空格后执行JSON解析

完整JavaScript实现代码

const rawData = `   {dataOrList=[{subFlowParam={name=postPrivate_On_Input_OR}, type=SUB_FLOW, tReferenceName=Data_42767_OR_43873}, {subFlowParam={name=postPrivate_On_Input_OR}, type=SUB_FLOW, tReferenceName=Data_42767_OR_43870}], dataOrListInput={Data_42767_OR_43873={DatalRouteId=43873, PrivatePayLoad={name=UpdateLink, payload={\"ReadingType\": \"PRIVATEXplorer;OperationType=Private\",\"TestMeta\": {\"CustomFields\": [{\"Name\": \"LineID\",\"Value\": \"Line1\"},{\"Name\": \"PhaseID\",\"Value\": \"Phase1\"}]}}}}, Data_42767_OR_43870={DatalRouteId=43870, PrivatePayLoad={name=UpdateLink, payload={\"ReadingType\": \"PRIVATEXplorer;OperationType=Private\",\"TestMeta\": {\"CustomFields\": [{\"Name\": \"LineID\",\"Value\": \"Line1\"},{\"Name\": \"PhaseID\",\"Value\": \"Phase1\"}]}}}}}}`;

// 1. 还原HTML转义的引号
let processed = rawData.replace(/\\"/g, '"');

// 2. 为对象属性名添加引号,替换属性后的=为:(仅匹配{或,后的属性)
processed = processed.replace(/([{,]\s*)(\w+)=/g, '$1"$2":');

// 3. 修正数组前的键值对格式
processed = processed.replace(/(\w+)=(\[)/g, '"$1":$2');

// 4. 解析为JSON
try {
  const jsonData = JSON.parse(processed.trim());
  console.log('转换结果:', jsonData);
} catch (err) {
  console.error('解析失败:', err.message);
}

关键细节说明

  • 正则([{,]\s*)(\w+)=确保只替换对象结构中作为属性名的=,不会误改payload里的OperationType=Private这类业务值。
  • 步骤3的正则专门处理数组关联的键,比如dataOrList=[...]这种直接跟数组的键值对,补上引号和冒号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:23:15