如何将字符串格式的JavaScript对象直接转换为可操作对象?
把非标准JS对象字符串转为可操作的JS对象
你提到的这个字符串确实不是标准JSON格式,直接用JSON.parse会报错,但有两种常见处理方式,我给你详细拆解:
方法一:转标准JSON后解析(推荐,安全)
你的字符串有三个不符合JSON规范的点:属性名未用双引号包裹、字符串用了单引号、多个对象的集合没有数组外层。我们可以用正则替换把它转成标准JSON,再解析:
const string_object = "{question_text: 'q 1', ans_1: 'yes', ans_2: 'no'}, {question_text: 'q 2', ans_1: 'United', ans_2: 'City'}, {question_text: 'q 3', ans_1: 'over', ans_2: 'under'}, {question_text: 'q 4', ans_1: 'over', ans_2: 'under'}, {question_text: 'q 5', ans_1: 'over', ans_2: 'under'}, {question_text: 'q 6', ans_1: 'over', ans_2: 'under'}"; // 1. 包裹成数组结构,给属性名加双引号,替换单引号为双引号 const validJson = `[${string_object}]` .replace(/(\w+):/g, '"$1":') .replace(/'/g, '"'); // 2. 解析为可操作的JS对象数组 const questionArray = JSON.parse(validJson); // 测试访问 console.log(questionArray[0].question_text); // 输出 "q 1"
这个方法的核心是把非标准格式修正为JSON认可的规范,全程不会执行额外代码,安全性拉满,适合处理外部来源或不可信的字符串。
方法二:用eval直接解析(不推荐,有风险)
如果这个字符串是你自己生成的、完全可信的,那可以用eval直接转成数组对象,步骤更简单:
const string_object = "{question_text: 'q 1', ans_1: 'yes', ans_2: 'no'}, {question_text: 'q 2', ans_1: 'United', ans_2: 'City'}, {question_text: 'q 3', ans_1: 'over', ans_2: 'under'}, {question_text: 'q 4', ans_1: 'over', ans_2: 'under'}, {question_text: 'q 5', ans_1: 'over', ans_2: 'under'}, {question_text: 'q 6', ans_1: 'over', ans_2: 'under'}"; const questionArray = eval(`[${string_object}]`); console.log(questionArray[1].ans_1); // 输出 "United"
⚠️ 重要提醒:eval会执行字符串里的任何JavaScript代码,如果这个字符串来自用户输入或其他不可信渠道,很容易被注入恶意代码,绝对不要在生产环境中使用这个方法。
总结
追求安全可靠就选第一种正则转JSON的方法;如果只是本地测试、字符串完全可信,第二种方法更快捷,但风险极高。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

