如何将input框中的字符串值转换为JSON数组对象?
问题解决方法
你用JSON.parse失败的核心原因是:input框里的字符串不是标准JSON格式——JSON规范要求对象的键和字符串值必须用双引号,而你这里用的是单引号,所以解析会报错。
下面给你几种可行的解决方式:
1. 修正input的value为标准JSON(推荐)
直接把input里的单引号全部替换成双引号,同时注意用单引号包裹input的value属性值(避免HTML属性的引号冲突):
<input id="txtstr" name="txtstr" value='[{"text":"t1","value":"1"},{"text":"t2","value":"2"},{"text":"t3","value":"3"},{"text":"t4","value":"4"}]' type="text" />
之后在JS里直接用JSON.parse就能得到目标数组:
const inputVal = $("#txtstr").val(); const resultArr = JSON.parse(inputVal); console.log(resultArr); // 和你定义的d1格式完全一致
2. 无法修改input内容时,先替换单引号再解析
如果没法改动input的原始内容,可以先把字符串里的单引号替换成双引号,再执行解析:
const inputVal = $("#txtstr").val(); // 全局替换所有单引号为双引号 const validJson = inputVal.replace(/'/g, '"'); const resultArr = JSON.parse(validJson); console.log(resultArr);
⚠️ 注意:如果你的文本内容本身包含单引号(比如text:'t1's'),这种替换会破坏原有内容,所以优先用第一种方法。
3. 慎用eval(仅在内容完全可信时使用)
如果上面两种方式都不适用,可以用eval直接解析字符串,但这个方法有严重的安全风险——如果input内容是用户可控的,可能会注入恶意代码:
const inputVal = $("#txtstr").val(); const resultArr = eval(inputVal); console.log(resultArr);
内容的提问来源于stack exchange,提问作者topcool
相关产品推荐
相关产品推荐

