在 iOS 快捷方式中使用 JSONata 解析 Spotify Web API 结果

问题描述 投票:0回答:1

我正在尝试从 JSONata 表达式获取结果以使用 HTML 和 Javascript 打印出来,但我没有任何运气。 该表达式在 JSONata Playground 中工作并生成我期望的数组,但当我将其包含在 JavaScript 函数中时,我没有得到任何输出。

这是我写的表达式:

items.{"Release Year":$number(($toMillis($.track.album.release_date))~>$fromMillis('[Y]')),"Track":track.name,"Artist(s)":$join($map(track.artists.name,$string),", "),"Album":track.album.name,"Genre":"","URL":$join(['https://song.link/s/',track.id]),"Release Date":track.album.release_date,"Duration":track.duration_ms,"Popularity":track.popularity,"SpotifyID":track.id,"Added to Playlist On":$toMillis($.added_at)~>$fromMillis('[M]/[D]/[Y] at [h]:[m] [P]')}

此表达式用于以下 HTML 中。由于这是 iOS 快捷方式,因此变量 apiResponse2 是通过一系列不同的命令填充的。我知道我从 API 得到了适当的响应:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/jsonata/jsonata.min.js"></script>
</head>
<body>
    
<script>

var jsonata = require("jsonata");
function evaluateJsonata() {
    var apiData = apiResponse2;
    var expression = jsonata(items.{"Release Year":$number(($toMillis($.track.album.release_date))~>$fromMillis('[Y]')),"Track":track.name,"Artist(s)":$join($map(track.artists.name,$string),", "),"Album":track.album.name,"Genre":"","URL":$join(['https://song.link/s/',track.id]),"Release Date":track.album.release_date,"Duration":track.duration_ms,"Popularity":track.popularity,"SpotifyID":track.id,"Added to Playlist On":$toMillis($.added_at)~>$fromMillis('[M]/[D]/[Y] at [h]:[m] [P]')});
    var result = expression.evaluate(apiData);
    document.write(JSON.stringify(result)) 
}
</script>

</body>
</html>

您可以在此链接查看 Spotify API 返回的 JSON 示例。 API JSON 也在 JSONata 游乐场

因为这是一个 iOS 快捷方式,所以我将以上内容发布在文本块中,然后执行以下操作:

所用快捷操作的屏幕截图

但是,我没有得到预期的数组。事实上,我什么也得不到。我希望我的错误与 Javascript 有关。

任何调试此问题的帮助将不胜感激。

javascript html jsonata ios-shortcut
1个回答
0
投票

尝试使您的函数异步并等待评估方法,如下所示:

async function evaluateJsonata() {
    var apiData = apiResponse2;
    var expression = jsonata(items.{"Release Year":$number(($toMillis($.track.album.release_date))~>$fromMillis('[Y]')),"Track":track.name,"Artist(s)":$join($map(track.artists.name,$string),", "),"Album":track.album.name,"Genre":"","URL":$join(['https://song.link/s/',track.id]),"Release Date":track.album.release_date,"Duration":track.duration_ms,"Popularity":track.popularity,"SpotifyID":track.id,"Added to Playlist On":$toMillis($.added_at)~>$fromMillis('[M]/[D]/[Y] at [h]:[m] [P]')});
    var result = await expression.evaluate(apiData);
    document.write(JSON.stringify(result)) 
}
© www.soinside.com 2019 - 2024. All rights reserved.