当我的曲目在标签中没有标题时,Icecast显示-
而不是空白行,所以,我得到这样的json(作为例子)这个json无效,因为"title" : -
代替"title" : "-"
。我在这里检查了- http://jsonlint.com/所以,我不能做json_decode()
,函数返回null
{
"icestats": {
"admin": "admin@admin",
"host": "host.com",
"location": "Moscow",
"server_id": "Icecast 2.4.2",
"server_start": "Fri, 15 May 2015 16:25:24 +0300",
"server_start_iso8601": "2015-05-15T16:25:24+0300",
"source": [
{
"audio_info": "channels=2;samplerate=44100;bitrate=192",
"channels": 2,
"genre": "various",
"listener_peak": 3,
"listeners": 0,
"listenurl": "http://mds.planeset.ru:8000/mds.mp3",
"samplerate": 44100,
"server_description": "Трансляции Модель Для Сборки
музыка",
"server_name": "Модель для сборки - музыка",
"server_type": "audio/mpeg",
"stream_start": "Fri, 15 May 2015 16:25:33 +0300",
"stream_start_iso8601": "2015-05-15T16:25:33+0300",
"title": -,
"dummy": null
},
{
"audio_info": "channels=2;samplerate=44100;bitrate=192",
"channels": 2,
"genre": "various",
"listener_peak": 10,
"listeners": 9,
"listenurl": "http://mds.planeset.ru:8000/mds_voice.mp3",
"samplerate": 44100,
"server_description": "Трансляции Модель Для Сборки -
голос",
"server_name": "Модель для сборки - голос",
"server_type": "audio/mpeg",
"stream_start": "Fri, 15 May 2015 16:25:33 +0300",
"stream_start_iso8601": "2015-05-15T16:25:33+0300",
"title": "Фред Саберхаген - Доброжил",
"dummy": null
}
]
}
}
这是json的例子,你可以看到在第一种情况下,我有title: -
,因为它我不能json_decode。
有xml2json文件。从Doeke Zanstra https://github.com/doekman/xml2json-xslt在服务器上。这个文件,我猜,将xml转换为json,也许有一种方法可以添加新的规则,将-
转换为null
在空白title
行,但我不知道我怎么能做到。
这看起来像是Icecast (xml2json.xslt)使用的XML到JSON模板中的一个错误。它没有将'-'转换为字符串,也许因为它认为这是一个负数,尽管没有数字。我会试着调查一下,看看能不能找出一个漏洞。如果有人想试一试,并提出一个好的解决方案,我会很感激。
我想指出,虽然你的断言,你的轨道没有标签是错误的。您的源客户端软件似乎将流的标题字段设置为-
。如果它将title设置为空字符串,那么转换实际上将返回null
。这源于这样一个事实,即流媒体MP3由于最初是由shooutcast完成的而严重损坏。曲目没有单独的元数据字段,只有一个名为title的字段和各种使用约定。
您可以通过将其设置为空字符串来验证这一点。http://mds.planeset.ru:8000/admin/metadata.xsl?song=&mount=%2Fmds.mp3&mode=updinfo&charset=UTF-8
谢谢你的报告,我们只能修复我们知道的错误。(bug报告的首选位置是http://trac.xiph.org)
如果没有办法得到有效的json,使用:
$json = str_replace( '"title": -', '"title": null', $json );
json_decode()
之前将"title": -
替换为"title": null
。