JavaScript中如何将特殊格式字符串转换为JSON?
转换非标准设备数据字符串为JSON的可行方案
你拿到的是类JSON格式的非标准字符串,不符合JSON规范的点包括:对象属性名无引号、用=替代:、存在HTML转义的引号\",所以直接用JSON.parse()会失败。以下是分步解决的代码方案:
处理步骤
- 还原HTML转义的引号,将
\"替换为标准双引号" - 给所有对象属性名添加双引号,并将属性名后的
=替换为:(精准匹配,避开值中的等号) - 修正数组关联键的格式(比如
dataOrList=→"dataOrList":) - 清理冗余空格后执行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
相关产品推荐
相关产品推荐

