如何使用jQuery将字符串转换为JSON对象?JSON.parse报错解决方案
JSON.parse 抛出
Unexpected token ' in JSON at position 1 错误的解决方案 错误根因
报错是因为你传入JSON.parse()的字符串不符合标准JSON语法规范:
标准JSON有强制语法要求:
- 所有对象的键、字符串类型的值必须用双引号
"包裹,不允许使用单引号' - 你当前传入的字符串全部用单引号包裹键和字符串值,本质是JS对象字面量的字符串表示,不是合法JSON,解析器读取到第一个单引号时就会抛出语法错误。
不管是原生JSON.parse()还是jQuery提供的$.parseJSON()方法,都只接受符合标准规范的JSON字符串,传入非标准格式都会触发同类报错。
可行解决方法
根据你是否能控制源字符串的生成,选择对应方案:
方案1:可控源字符串时输出标准JSON(最优方案)
如果你是自己拼接字符串、或者可以协调后端接口返回格式,直接生成符合规范的双引号JSON字符串即可,示例:
// 合法JSON字符串示例 const str = `{"8": {"name": "breeze bedsheet ", "price": 1150, "qty": 1, "strid": "8", "image": "images/download_1.jpg"}, "10": {"name": "neat and clean bedsheet ", "price": 1150, "qty": 2, "strid": "10", "image": "images/images_2.jpg"}}`; const obj = JSON.parse(str); // 正常解析无报错
方案2:无法修改源字符串时的转换方案
如果你只能拿到现有单引号格式的字符串,可根据场景选以下两种方式:
- 安全场景下的快速方案:eval转换
仅在字符串100%可信、无用户输入/第三方恶意内容的场景下使用,否则会存在代码注入风险:const str = "{'8': {'name': 'breeze bedsheet ', 'price': 1150, 'qty': 1, 'strid': '8', 'image': 'images/download_1.jpg'}, '10': {'name': 'neat and clean bedsheet ', 'price': 1150, 'qty': 2, 'strid': '10', 'image': 'images/images_2.jpg'}}"; const obj = eval(`(${str})`); - 通用安全方案:格式修正后再解析
先把字符串中用于包裹键值的单引号替换为双引号,转为合法JSON后再调用JSON.parse(),如果字符串内容本身包含单引号,需要额外写转义逻辑避免替换异常,简单场景示例:const str = "{'8': {'name': 'breeze bedsheet ', 'price': 1150, 'qty': 1, 'strid': '8', 'image': 'images/download_1.jpg'}, '10': {'name': 'neat and clean bedsheet ', 'price': 1150, 'qty': 2, 'strid': '10', 'image': 'images/images_2.jpg'}}"; const validJsonStr = str.replace(/'/g, '"'); const obj = JSON.parse(validJsonStr);
内容的提问来源于stack exchange,提问作者Muhammad Waqas
相关产品推荐
相关产品推荐

