iccast json-status.xls,无效json答案与空白歌曲标题


Icecast json-status.xls, not valid json answer with blank song title

当我的曲目在标签中没有标题时,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