JavaScript如何遍历Express从MySQL返回的嵌套JSON列表获取字段值
解决思路
问题根因
你当前解析后的对象长度为1是因为接口返回的结构是外层嵌套了一层数组,数组内唯一对象的JSON字段存储的是未序列化的字符串内容,且字符串内使用单引号不符合JSON标准,无法直接读取字段。
处理步骤
- 第一步:从第一次解析结果中取出
JSON字段对应的字符串内容 - 第二步:将字符串内的单引号全部替换为双引号,同时在字符串首尾添加方括号,拼接为合法的JSON数组格式
- 第三步:对处理后的字符串做二次JSON解析,得到可遍历的对象数组
代码实现
// 第一次解析接口返回的JSON const resp = JSON.parse(xhr.responseText); // 取出嵌套的JSON字符串,处理格式后二次解析 const profileStr = resp[0].JSON; const validJsonStr = '[' + profileStr.replaceAll("'", '"') + ']'; const profileList = JSON.parse(validJsonStr); // 遍历获取字段 profileList.forEach(item => { console.log('profile:', item.profile); console.log('count:', item.count); });
优化建议(可选)
如果能调整后端逻辑,推荐在MySQL中直接存储合法的JSON数组类型,Express接口返回时直接把数组赋值给JSON字段,不要转成字符串存储,前端仅需一次解析即可直接遍历,无需额外格式处理。
内容的提问来源于stack exchange,提问作者Jane Wilkie
相关产品推荐
相关产品推荐

