У меня есть json-файл:
[{ city: "myCity", lat: 11.1111, format: "etc", lng: 1.11, street: "mystreet", hours: [{ A: "0230", B: "2200", C: "16-04-2012" }, { A: "0130", B: "2200", C: "11-04-2012" }, { A: "0230", B: "2200", C: "18-04-2012" }, { A: "0130", B: "2200", C: "12-04-2012" }, { A: "0230", B: "2200", C: "20-04-2012" }, { A: "0130", B: "2200", C: "13-04-2012" }, { A: "0230", B: "2200", C: "22-04-2012" }, { A: "0130", B: "2200", C: "14-04-2012" }, { A: "0230", B: "2200", C: "24-04-2012" }, { A: "0130", B: "2200", C: "15-04-2012" }, { A: "0230", B: "2200", C: "26-04-2012" }, { A: "0130", B: "2200", C: "16-04-2012" }, { A: "0230", B: "2200", C: "28-04-2012" }, { A: "0130", B: "2200", C: "17-04-2012" }], housenumber: "12" }]
Firebug анализирует это без проблем. В нем говорится, что «часы» – это объект, в котором есть определенные объекты, содержащие F, U и D. Но я не могу разобрать его с помощью регулярных php-парсеров. Я почти менял его на XML, но это стоило бы мне много времени, и должен быть какой-то парсер, который может справиться с этим форматом, если firebug справится с этим!
Я уверен, что это дубликат, но он не может его найти. И поскольку комментарии игнорируются, я просто добавлю его в качестве ответа снова.
Если вам нужно декодировать выражение Javascript (у него нет ключевых кавычек, как это требовал бы JSON), вы можете использовать:
http://pear.php.net/package/Services_JSON
который имеет некоторую резервную логику для обработки некотируемых ключей
http://include-once.org/p/upgradephp/#upgrade.php.prefixed
с up_json_decode($json, FALSE, 512, JSON_PARSE_JAVASCRIPT)
В качестве нецелесообразной альтернативы существуют некоторые временные исправления регулярного выражения и строки для предварительной обработки некотируемых ключей.
$obj = json_decode($json);