如何移除JSON响应中的双引号,恢复图标数组引用功能?
解决API返回字符串形式数组引用的问题
看起来你遇到的核心问题是API把原本应该是数组引用的内容变成了字符串字面量,导致无法直接访问源数组。这里有两种靠谱的解决思路,你可以根据自己的场景选择:
方法1:解析字符串提取数组名和索引(安全推荐)
这种方法不需要执行动态代码,更安全,适合大多数场景。我们可以用正则表达式把字符串里的数组名和索引拆出来,再手动去访问对应的数组项。
示例代码:
假设你已经拿到了API返回的数组数据(比如叫apiResponse),同时你的源数组srcs是可访问的(全局或当前作用域内):
// 遍历API返回的每个对象 apiResponse.forEach(item => { // 用正则匹配 "srcs[15]" 这种格式 const refMatch = item.avatar.match(/^(\w+)\[(\d+)\]$/); if (refMatch) { const [_, arrayName, indexStr] = refMatch; const index = parseInt(indexStr, 10); // 如果srcs是全局变量,用window[arrayName]访问;如果是局部变量,可以用一个映射对象 // 局部场景示例:const arrayMap = { srcs }; 然后用 arrayMap[arrayName][index] item.avatar = window[arrayName][index]; } });
如果确定所有avatar字段都是srcs[xxx]格式,还可以简化代码:
apiResponse.forEach(item => { const index = parseInt(item.avatar.replace(/srcs\[(\d+)\]/, '$1'), 10); item.avatar = srcs[index]; });
方法2:使用eval(仅当API内容完全可信时用)
如果你能100%保证API返回的字符串没有恶意代码,也可以用eval直接执行这个字符串,把它转成实际的数组引用:
apiResponse.forEach(item => { // 只有当你完全信任API返回内容时才用这个! item.avatar = eval(item.avatar); });
⚠️ 注意:eval会执行传入的任何代码,如果API被篡改返回恶意脚本,会有安全风险,所以除非你能完全控制API的输出,否则不推荐这种方法。
两种方法都能让你直接引用源数组srcs的对应项,而不需要把srcs[15]的值提前存入API返回的对象里。
内容的提问来源于stack exchange,提问作者gileneusz
相关产品推荐
相关产品推荐

