React.js中如何将接口返回的类JSON字符串转为数组对象以使用filter方法
方案1:JavaScript端处理(API返回后未入库前直接操作)
你拿到的返回字符串属于非标准JSON格式,对象键和字符串值缺少双引号,无法直接用JSON.parse()解析,可选用以下两种方式处理:
- 正则补全格式后解析(安全性高,推荐使用)
// 接口返回的原始字符串 const apiResponse = `[{title: frontpartID, state: false},{title: backpartID, state: true}]`; // 正则匹配未加引号的键/字符串值,自动补全双引号 const standardJson = apiResponse.replace(/([a-zA-Z0-9_]+)(?=:)|(?<=: )([a-zA-Z0-9_]+)(?=,|})/g, '"$1$2"'); // 解析为对象数组 const dataArr = JSON.parse(standardJson); // 按需求筛选 const filteredData = dataArr.filter(item => item.state === true);
eval快速转换(仅可在你100%确认返回内容无恶意注入风险的场景使用)
const apiResponse = `[{title: frontpartID, state: false},{title: backpartID, state: true}]`; const dataArr = eval(`(${apiResponse})`); const filteredData = dataArr.filter(item => item.state === true);
方案2:SQL Server侧处理(字符串已存入varchar字段,需在库内操作)
SQL Server 2016及以上版本内置JSON解析能力,先将存储的非标准字符串转为标准JSON,再用OPENJSON解析筛选:
DECLARE @rawContent VARCHAR(MAX) = '[{title: frontpartID, state: false},{title: backpartID, state: true}]' -- 替换补全为标准JSON格式 DECLARE @standardJson VARCHAR(MAX) = REPLACE(REPLACE(REPLACE(REPLACE(@rawContent, 'title: ', '"title": "'), ', state', '", "state"'), 'false}', 'false}'), 'true}', 'true}') -- 解析并筛选state为true的条目 SELECT title, state FROM OPENJSON(@standardJson) WITH ( title VARCHAR(100) '$.title', state BIT '$.state' ) WHERE state = 1
内容的提问来源于stack exchange,提问作者Hugo Escobar
相关产品推荐
相关产品推荐

