访问对象message中的data数据及执行JSON.stringify时报错如何解决
问题原因
你当前的message字段存储的是不符合JSON规范的字符串:标准JSON要求所有键名、字符串类型的值都必须使用双引号包裹,而你的内容使用了单引号,因此直接调用JSON.parse解析、或者直接对非法字符串做相关JSON操作都会抛出错误。
处理方案
方案1:替换单引号为双引号后解析(推荐,无安全风险)
适合字符串内容本身不含单引号的场景:
// 原始数据结构 const response = { message: "{'data':{'status':'active'}}" }; // 替换所有单引号为符合规范的双引号 const standardJsonStr = response.message.replace(/'/g, '"'); // 解析为JS对象 const result = JSON.parse(standardJsonStr); // 访问data字段 const targetData = result.data; // 需要序列化的话,直接对解析后的对象操作即可 const serialized = JSON.stringify(result);
方案2:使用Function构造器解析(适合内容含单引号场景,需确保内容来源安全)
如果你的字符串内部本身就包含合法的单引号内容,直接替换会破坏结构,可以用这个方案:
const response = { message: "{'data':{'status':'active'}}" }; // 把字符串转为可执行的表达式返回对象 const result = new Function(`return ${response.message}`)(); const targetData = result.data;
注意:如果
message的内容来源不可控,该方法存在XSS安全风险,仅可用于内容来源完全可信的场景。
内容的提问来源于stack exchange,提问作者Arunkumar Subramani
相关产品推荐
相关产品推荐

