Icecast json-status.xls,无效json回答空白歌曲标题

时间:2015-05-15 22:29:39

标签: javascript php json xslt icecast

当我的曲目标签中没有标题时,Icecast会显示-而不是空白 line,所以,我得到这样的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。

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

2 个答案:

答案 0 :(得分:1)

如果无法获得有效的json,请使用:

$json = str_replace( '"title": -', '"title": null', $json );

在使用"title": -之前将"title": null替换为json_decode()

答案 1 :(得分:1)

这看起来像是Icecast使用的XML to JSON模板中的错误(xml2json.xslt)。它没有将' - '转换为字符串,可能因为它认为它是负数,尽管没有数字。如果我能搞清楚修正错误,我会试着去研究一下。如果其他人想要对它进行刺戳并想出一个好的解决方案,我将不胜感激。

我想要注意的是,你断言你的赛道没有标签是错误的。您的源客户端软件似乎将流的标题字段设置为-。如果将 title 设置为空字符串,则转换实际上将返回null。这源于流媒体MP3因Shoutcast最初完成的原因而被严重破坏的事实。轨道没有单独的元数据字段,只有一个字段名为 title ,以及各种约定如何使用。

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

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