Icecast 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(),函数 returns 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.

服务器上有来自 Doeke Zanstra https://github.com/doekman/xml2json-xslt 的文件 xml2json.xslt。这个文件,我想,将 xml 转换为 json 并且也许有一种方法可以添加新规则以将 - 转换为 null 在空白 title 行中,但我不知道我该怎么做。

如果没有办法得到有效的json,使用:

$json = str_replace( '"title": -', '"title": null', $json );
在使用 json_decode() 之前

"title": - 替换为 "title": null

这看起来像是 Icecast (xml2json.xslt) 使用的 XML 到 JSON 模板中的错误。它没有将“-”转换为字符串,可能是因为它认为它是一个负数,尽管没有数字。如果我能找出错误修复,我会尝试研究它。如果其他人想试一试并提出一个好的解决方案,我将不胜感激。

我想指出的是,您关于曲目没有标签的断言是错误的。您的源客户端软件似乎将流的 title 字段设置为 -。如果它将 title 设置为空字符串,那么转换实际上会 return null。这是因为流式 MP3 由于 Shoutcast 最初的做法而被严重破坏。轨道没有单独的元数据字段,只有 one 字段名为 title 以及如何使用它的各种约定。

您可以通过将其设置为空字符串来自行验证。 http://mds.planeset.ru:8000/admin/metadata.xsl?song=&mount=%2Fmds.mp3&mode=updinfo&charset=UTF-8

感谢您的报告,我们只能修复我们知道的错误。 (错误报告的首选位置是 http://trac.xiph.org