【问题标题】:Parse json returned from node server Spotify解析从节点服务器 Spotify 返回的 json
【发布时间】:2016-11-24 11:03:28
【问题描述】:

我想将格式正确的 JSON 从节点服务器发送回前端。

var express = require('express');
var app = express();
app.get('/route', function(req, res){
    res.json(tracks)
});

然后在前端,我正在使用 jQuery 发出GET 请求

$.get('http://localhost:8888/route', function(data){
    console.log(JSON.parse(data));
});

这是返回数据,但是,它是作为字符串返回的。我尝试使用JSON.parse,但收到以下错误消息。节点侧的data 是一个对象数组。也许这会导致问题。

Uncaught SyntaxError: Unexpected token ,在 JSON 中的位置 2847(...)

要填充轨道数组,我有以下代码

tracks = [];
for (var i = 0; i < songLinks.length; i++) {
  request('https://api.spotify.com/v1/tracks/' + songLinks[i].split(":").pop(), function(error, response, body) {
    tracks.push(body)
  });
}

曲目数组中的第一项是:

"{↵ "专辑" : {↵ "album_type" : "专辑",↵ "艺术家" : [ {↵
“external_urls”:{↵“spotify”: "https://open.spotify.com/artist/1yAwtBaoHLEDWAnWR87hBT"↵ },↵
"href" : "https://api.spotify.com/v1/artists/1yAwtBaoHLEDWAnWR87hBT",↵ "id" : "1yAwtBaoHLEDWAnWR87hBT",↵ "name" : "普通鼠标",↵
“类型”:“艺术家”,↵ “uri”: "spotify:艺术家:1yAwtBaoHLEDWAnWR87hBT"↵ } ],↵
“available_markets”:[“AD”、“AR”、“AT”、“AU”、“BE”、“BG”、“BO”、 “BR”、“CA”、“CH”、“CL”、“CO”、“CR”、“CY”、“CZ”、“DE”、“DK”、“DO”、 “EC”、“EE”、“ES”、“FI”、“FR”、“GB”、“GR”、“GT”、“HK”、“HN”、“HU”、 “ID”、“IE”、“IS”、“IT”、“JP”、“LI”、“LT”、“LU”、“LV”、“MC”、“MT”、 “MX”、“MY”、“NI”、“NL”、“NO”、“NZ”、“PA”、“PE”、“PH”、“PL”、“PT”、 “PY”、“SE”、“SG”、“SK”、“SV”、“TR”、“TW”、“US”、“UY”],↵
“external_urls”:{↵“spotify”: "https://open.spotify.com/album/4YvdAtWh6LlnIrv0qIqkCF"↵ },↵
"href" : "https://api.spotify.com/v1/albums/4YvdAtWh6LlnIrv0qIqkCF",↵ “id”:“4YvdAtWh6LlnIrv0qIqkCF”,↵ “图像”:[ {↵ “高度”: 640,↵“网址”: "https://i.scdn.co/image/411d254a0e46f509dda22f58d699782f16f7bd44",↵
“宽度”:640↵ },{↵ “高度”:300,↵ “网址”: "https://i.scdn.co/image/982b3b7c3ad3e81aed9e0475da07894262f93923",↵
“宽度”:300↵},{↵“高度”:64,↵“网址”: "https://i.scdn.co/image/e4a25681c1163b349ff71b464d2cfc8fda089d58",↵
"width" : 64↵ } ],↵ "name" : "No One's First, And You're Next",↵ “类型”:“专辑”,↵ “uri”:“spotify:专辑:4YvdAtWh6LlnIrv0qIqkCF”↵ },↵ "艺术家" : [ {↵ "external_urls" : {↵ "spotify" : "https://open.spotify.com/artist/1yAwtBaoHLEDWAnWR87hBT"↵ },↵
"href" : "https://api.spotify.com/v1/artists/1yAwtBaoHLEDWAnWR87hBT",↵ "id" : "1yAwtBaoHLEDWAnWR87hBT",↵ "name" : "普通鼠标",↵
“类型”:“艺术家”,↵ “uri”: “spotify:艺术家:1yAwtBaoHLEDWAnWR87hBT”↵ } ],↵ “available_markets”: [“AD”、“AR”、“AT”、“AU”、“BE”、“BG”、“BO”、“BR”、“CA”、“CH”、“CL”、 “CO”、“CR”、“CY”、“CZ”、“DE”、“DK”、“DO”、“EC”、“EE”、“ES”、“FI”、 “FR”、“GB”、“GR”、“GT”、“HK”、“HN”、“HU”、“ID”、“IE”、“IS”、“IT”、 “JP”、“LI”、“LT”、“LU”、“LV”、“MC”、“MT”、“MX”、“MY”、“NI”、“NL”、 “NO”、“NZ”、“PA”、“PE”、“PH”、“PL”、“PT”、“PY”、“SE”、“SG”、“SK”、 “SV”,“TR”,“TW”,“US”,“UY”],↵ “disc_number”:1,↵ “duration_ms”: 330573,↵“显式”:假,↵“external_ids”:{↵“isrc”: “USSM10700655”↵ },↵ “external_urls”:{↵ “spotify”: "https://open.spotify.com/track/6Z3pIqEp5n5faSopwto0tB"↵ },↵ "href" : "https://api.spotify.com/v1/tracks/6Z3pIqEp5n5faSopwto0tB",↵ "id" : “6Z3pIqEp5n5faSopwto0tB”,↵ “名称”:“King Rat”,↵ “人气”:38,↵ “预览网址”: "https://p.scdn.co/mp3-preview/037294fdd97c94bebf14e7ec1b1fb2c0a1986adc",↵ “track_number”:7,↵“type”:“track”,↵“uri”: "spotify:track:6Z3pIqEp5n5faSopwto0tB"↵}"

下面是回复的截图,以防我的问题更清楚。

【问题讨论】:

  • 这意味着data 不是有效的json
  • @Rayon 谢谢!我在节点端做错了吗?
  • 您能否发布代码如何在 node.js 端创建数据?您能否也发布一个 json 字符串(屏幕截图中的索引 0)?
  • @phantom 你可以在这里验证你的 json:jsonlint.com
  • 建议您只记录收到的数据(而不是解析的结果):这将允许您将其复制到其他工具中(或手动检查)

标签: javascript jquery json node.js spotify


【解决方案1】:

将正文更改为响应

request('https://api.spotify.com/v1/tracks/' + songLinks[i].split(":").pop(), function(error, response, body) {
    tracks.push(JSON.parse(body));
  });

【讨论】:

  • 这给了我一个对象数组和一些作品。这意味着在前端我必须遍历每个返回的对象和JSON.parse(data[i].body)。这是最好的方法吗?
  • 问题是我在推送到轨道数组之前没有解析响应正文。
  • 是的,如果你有有效的 json 你不需要解析每个项目
  • 我建议你使用developer.spotify.com/web-api/get-several-tracks 来获取多个traks,它是一个单一的ajax 调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
相关资源
最近更新 更多