You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取字符串形式的非JSON格式JavaScript对象?

解决非标准JSON字符串转JavaScript对象的问题

你遇到的核心问题是拿到的字符串是非标准JSON格式——JSON要求对象的键必须用双引号包裹,但你的字符串里的键(比如name、code)都是裸写的,所以JSON.parse无法识别。下面给你几个可行的解决方法,按安全优先级排序:

方法1:使用JSON5库(推荐,安全可靠)

JSON5是JSON的超集,支持非标准的语法(比如键不加引号、单引号字符串、尾逗号等),完美适配你的场景,而且不需要用风险较高的eval。

如果是Node.js项目,先安装JSON5:

npm install json5

然后在代码里使用:

const JSON5 = require('json5');

// 假设你截取后的字符串是objStr
var objStr = resp.substring(0, resp.length-9);
// 先去掉外层包裹的双引号
var cleanStr = objStr.slice(1, -1);
// 用JSON5解析
var resultObj = JSON5.parse(cleanStr);

浏览器环境的话,可以直接引入JSON5的CDN脚本,用法完全一致。这个方法对复杂结构(比如嵌套数组、多层对象)都能完美处理,且没有代码注入风险。

方法2:使用eval(仅当完全信任API返回内容时用)

如果API是你自己控制的,或者能100%保证返回内容安全,可以用eval来解析。注意要给字符串加括号,避免被当成代码块解析:

var objStr = resp.substring(0, resp.length-9);
var cleanStr = objStr.slice(1, -1);
// 加括号让eval把它当成对象字面量表达式
var resultObj = eval(`(${cleanStr})`);

⚠️ 重要提醒:如果API返回的内容不可信(比如被篡改过),eval会执行里面的任意代码,带来严重的安全风险,所以非必要不要用这个方法。

方法3:手动转换为标准JSON(适合简单结构)

如果不想引入第三方库,可以用正则表达式给所有裸键加上双引号,转换成标准JSON后再用JSON.parse解析:

var objStr = resp.substring(0, resp.length-9);
var cleanStr = objStr.slice(1, -1);
// 正则匹配裸键,替换成带双引号的键
var standardJson = cleanStr.replace(/([a-zA-Z_$][a-zA-Z0-9_$]*)(?=\s*:)/g, '"$1"');
var resultObj = JSON.parse(standardJson);

这个方法的局限性:如果你的字符串里包含类似键的内容(比如某个字符串值是"name: test"),正则可能会误替换,导致解析失败。所以只推荐结构简单、没有复杂字符串内容的场景使用。

内容的提问来源于stack exchange,提问作者Jalu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:55:21