我使用以下python代码连接到jsonrpc服务器并删除一些歌曲信息。但是,我无法弄清楚如何将当前标题输入变量以在其他地方打印。这是代码:
TracksInfo = []
for song in playingSongs:
data = { "id":1,
"method":"slim.request",
"params":[ "",
["songinfo",0,100, "track_id:%s" % song, "tags:GPASIediqtymkovrfijnCYXRTIuwxN"]
]
}
params = json.dumps(data, sort_keys=True, indent=4)
conn.request("POST", "/jsonrpc.js", params)
httpResponse = conn.getresponse()
data = httpResponse.read()
responce = json.loads(data)
print json.dumps(responce, sort_keys=True, indent=4)
TrackInfo = responce['result']["songinfo_loop"][0]
TracksInfo.append(TrackInfo)
这使我以json格式返回数据,并且打印json.dump带回来:
pi@raspberrypi ~/pithon $ sudo python tom3.py
{
"id": 1,
"method": "slim.request",
"params": [
"",
[
"songinfo",
"0",
100,
"track_id:-140501481178464",
"tags:GPASIediqtymkovrfijnCYXRTIuwxN"
]
],
"result": {
"songinfo_loop": [
{
"id": "-140501481178464"
},
{
"title": "Witchcraft"
},
{
"artist": "Pendulum"
},
{
"duration": "253"
},
{
"tracknum": "1"
},
{
"type": "Ogg Vorbis (Spotify)"
},
{
"bitrate": "320k VBR"
},
{
"coverart": "0"
},
{
"url": "spotify:track:2A7ZZ1tjaluKYMlT3ItSfN"
},
{
"remote": 1
}
]
}
}
我想要得到的是result.songinfoloop.title(但我试过了!)
答案 0 :(得分:0)
songinfo_loop
结构是......奇特的。它是一个字典列表,每个字典只有一个键。
循环播放,直到你有一个标题:
TrackInfo = next(d['title'] for d in responce['result']["songinfo_loop"] if 'title' in d)
TracksInfo.append(TrackInfo)
更好的选择是“崩溃”。所有这些词典合二为一:
songinfo = reduce(lambda d, p: d.update(p) or d,
responce['result']["songinfo_loop"], {})
TracksInfo.append(songinfo['title'])
答案 1 :(得分:0)
songinfo_loop是一个不是字典的列表。这意味着你需要按位置调用它,或者循环遍历它并找到键值为“title”的dict
位置:
responce["result"]["songinfo_loop"][1]["title"]
循环:
for info in responce["result"]["songinfo_loop"]:
if "title" in info.keys():
print info["title"]
break
else:
print "no song title found"
真的,似乎你想让songinfo_loop成为一个字典,而不是一个列表。但如果您需要将其保留为列表,则可以使用此标题。
答案 2 :(得分:-1)
结果实际上是一个标准的python dict,所以你可以使用
responce["result"]["songinfoloop"]["title"]
哪个应该有用