不使用eval解析Tumblr API返回的JS格式数据的方法
解决Tumblr API返回JS格式而非JSON的解析问题(无需eval)
我懂你的困扰——Tumblr这个API返回的是带变量声明的JS代码,不是标准JSON,还不能用eval(毕竟安全风险真的不能忽视)。别慌,用字符串处理+标准JSON.parse就能完美搞定这个问题。
核心思路
Tumblr返回的内容本质是JSONP风格的响应,只是多了开头的var tumblr_api_read = 和可能存在的结尾分号。我们只需要把这些多余的部分剥离掉,剩下的就是标准JSON字符串,再用JSON.parse解析成JS对象就行,完全不用碰eval。
具体实现步骤
- 获取响应文本:先把API返回的内容以纯文本形式拿到(别直接用
response.json(),格式不对会直接报错)。 - 清理字符串:用正则表达式移除开头的变量声明和结尾可能存在的分号。
- 解析为JSON:用
JSON.parse把清理后的字符串转换成JavaScript对象,之后就能正常操作数据了。
完整代码示例
// 发起API请求 fetch('https://taylorswift.tumblr.com/api/read?start=0&format=json&num=1') .then(response => response.text()) // 先获取纯文本格式的响应 .then(rawResponse => { // 移除多余的前缀和可能的后缀分号 const cleanJsonStr = rawResponse.replace(/^var tumblr_api_read = |;$/g, ''); try { // 解析成可操作的JS对象 const tumblrData = JSON.parse(cleanJsonStr); // 示例:打印博主名称和第一篇帖子的URL console.log('博主名称:', tumblrData.tumblelog.name); console.log('第一篇帖子URL:', tumblrData.posts[0].url); } catch (parseErr) { console.error('JSON解析失败:', parseErr); } }) .catch(reqErr => { console.error('API请求失败:', reqErr); });
为什么这个方法更安全?
和eval不同,JSON.parse只会严格解析标准JSON格式的内容,不会执行任何代码逻辑,就算响应里混入了恶意内容也无法触发执行,彻底规避了eval带来的安全隐患。
内容的提问来源于stack exchange,提问作者hguser
相关产品推荐
相关产品推荐

