在节点中将 JSONP 响应字符串转换为 JSON

Posted

技术标签:

【中文标题】在节点中将 JSONP 响应字符串转换为 JSON【英文标题】:Convert JSONP response string to JSON in node 【发布时间】:2016-07-30 08:23:34 【问题描述】:

我在节点服务器上向返回 JSONP 的端点发出请求。我尝试删除回调参数并且请求失败。正在寻找一种将这个 JSONP 响应转换为普通 JSON 的方法。

 data: 'callback1241232([201, "name": "Thomas"]);'

预期

 data: [201, "name": "Thomas"] 

axios 是我用来发出这些请求的库,它不会为您转换。

【问题讨论】:

给它一个回调来使用,然后把它从字符串中剥离出来。 我只有你在上面看到的这个对象,有什么回调可以使用? “我在节点服务器上向返回 JSONP 的端点发出请求。我尝试删除回调参数,但请求失败。” 这就是我的回调参考。 端点接受一个回调参数,这个参数用于包装函数,这是供客户端使用的,所以当脚本加载到页面上时,回调会触发。我不能在服务器上用这个做任何事情...... 对,所以给它一个回调参数,然后在服务器上从 JSONP 字符串中删除回调。这是非常简单的字符串操作,你甚至不需要正则表达式。 【参考方案1】:

这是使用regex 的一种方法。

return axios.get('http://ex.com/jsonp-res?callback=callback')
.then(data => 
  data = JSON.parse(data.data.replace(/^callback\(|\)\;/g, ''))
  console.log(data)
)

【讨论】:

【参考方案2】:

这是使用可怕的eval 的一种方法。

return axios.get('http://ex.com/jsonp-res?callback=callback')
.then(data => 
  function callback(data) 
    console.log(data)
  
  eval(data.data)
)

【讨论】:

以上是关于在节点中将 JSONP 响应字符串转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何将afnetworking json字典转换为字符串,然后在IOS中将字符串转换为字典?

Python获取jsonp数据

如何在Javascript中将字符串转换为json

在打字稿中将 JSON 转换为字符串数组

如何在 Kotlin Android 中将字符串转换为 JSON 对象 [重复]

如何在 PHP 中将非 json 字符串转换为有效的 json 字符串