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

使用Spotify Web-API调用transferMyPlayback()时遇JSON格式错误

解决Spotify Web API transferMyPlayback() 400 "Malformed json"错误

我之前也碰到过一模一样的问题,其实核心原因是你对spotify-web-api-js库的参数传递逻辑理解错了——你不需要手动把参数转成JSON字符串,库本身会自动处理请求体的序列化工作,手动转JSON反而会让API收到格式错误的内容。

你的代码问题分析

看你的代码片段:

var deviceIds = {}; 
deviceIds["device_ids"] = [id]; 
var deviceIds_JSON = JSON.stringify(deviceIds);
// 然后把deviceIds_JSON传给transferMyPlayback?

当你把已经stringify后的JSON字符串传给transferMyPlayback方法时,库会再次对这个字符串做序列化,最终发送给Spotify API的请求体就变成了类似"{"device_ids":["xxx"]}"这样的格式——这是一个被字符串包裹的JSON,完全不符合API要求的纯JSON对象,自然会返回400错误。

正确的调用方式

spotify-web-api-js的transferMyPlayback方法接受一个普通JavaScript对象作为参数,直接传递包含device_ids数组的对象即可:

基础写法(仅切换设备)

// 假设你已经通过getMyDevices()获取到目标设备ID:id
spotifyApi.transferMyPlayback({
  device_ids: [id]
})
.then(function(data) {
  console.log('播放设备切换成功!', data);
})
.catch(function(err) {
  console.error('切换失败:', err);
});

附带播放状态控制(可选)

如果需要切换设备后立即恢复播放,可以加上play参数:

spotifyApi.transferMyPlayback({
  device_ids: [id],
  play: true // 切换后自动播放,默认值为false
})
.then(function(data) {
  console.log('播放设备切换并开始播放!', data);
})
.catch(function(err) {
  console.error('操作失败:', err);
});

额外排查点

如果按上面的写法还是报错,可以检查这两点:

  • 设备ID是否有效:确保id是从getMyDevices()接口获取到的合法设备ID,不要用自定义的字符串或无效ID。
  • 权限是否齐全:你的Spotify应用必须申请了user-modify-playback-state权限,否则会返回权限相关错误(不过此时错误码通常是403,而非400)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:21:15