如何使用XQuery从Spotify返回的嵌套JSON中提取艺术家名称
错误原因
你的代码路径和JSON实际结构不匹配:你直接从JSON根节点查找artists字段,但实际artists的完整嵌套层级为:
根对象 →
items数组 → 数组成员对象 →track对象 →album对象 →artists数组
正确实现代码
提取所有去重的艺术家名称
xquery version "3.1"; let $root := fn:json-doc("spoti.json") (: 遍历所有items下的artists数组成员 :) let $all_artists := $root?items?*?track?album?artists?* return <Playlist> <song> { for $name in fn:distinct-values($all_artists?name) return <name>{$name}</name> } </song> </Playlist>
提取artists下的其他嵌套字段
如果需要同时获取艺术家id、外链、uri等其他字段,调整循环逻辑即可:
xquery version "3.1"; let $root := fn:json-doc("spoti.json") let $all_artists := $root?items?*?track?album?artists?* return <Playlist> { for $artist in $all_artists return <artist> <name>{$artist?name}</name> <id>{$artist?id}</id> <spotify_url>{$artist?external_urls?spotify}</spotify_url> <uri>{$artist?uri}</uri> </artist> } </Playlist>
路径说明
?*用于遍历数组的所有成员,对应JSON数组的迭代操作- 多层
?字段名按层级嵌套向下查找对应字段,和JSON的结构完全对应
内容的提问来源于stack exchange,提问作者zedd
相关产品推荐
相关产品推荐

