2013-02-24 2 views
2

вот мой PHP-скрипт.PHP: выходы формата JSON в одну длинную одиночную строку

do2:locu alexus$ cat venuesearch.php 
<?php 

$KEY='XXXXXXXXXXXXXXX'; 
$URL='http://api.locu.com/v1_0/venue/search/?api_key='; 

$ch=curl_init(); 
curl_setopt($ch, CURLOPT_URL, $URL.$KEY); 
curl_setopt($ch, CURLOPT_HEADER,0); 

print_r(json_decode(curl_exec($ch),TRUE)); 

?> 
do2:locu alexus$ 

locu сервис обеспечивает выход в формате JSON. Когда я запускаю скрипт, я получаю вывод в длинной одиночной строке.

образец продукции:

do2:locu alexus$ php venuesearch.php 
{"meta": {"cache-expiry": 3600, "limit": 25}, "objects": [{"categories": ["restaurant"], "country": "United States",.......... 

Что мне не хватает? Как я могу получить доступ к каждой из этих переменных? возможно, имеет смысл преобразовать его в XML?

* UPDATE *: .. в примере # 1 из PHP: json_decode - Manual показывает форматированный вывод, если я использую true тогда я получаю массив, я не получаю ни выхода, ни formatet массив.

+0

im not sure, где вы хотите получить к нему доступ. –

+0

Что не так с выходом формата JSON в одну длинную одиночную строку? – Aboodred1

+0

Вы можете получить к нему доступ через: $ var = json_decode(); $ var ['key'], например. –

ответ

2

Попробуйте добавить:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

перед выполнением.

Похоже, что выполнение просто печатает ответ, а не возвращает его как строку, обрабатываемую json_decode.

+0

О, я пропустил это. Имеет больше смысла, чем мой ответ :) Трудность в том, что 'print_r (null)' ничего не выводит. Хорошая причина использовать 'var_dump' вместо этого ... –

+0

@fab Ваш ответ по-прежнему хорош, так как разделение каждой процедуры может помочь определить проблему. alexus, я бы все же взглянул на ответ Fab, чтобы изолировать проблему, потому что гораздо легче отлаживать каждый вызов функции, а не кучу вложенных вызовов. – Stegrex

+0

спасибо! вот и все! – alexus

2

Вы должны смотреть на исходные данные:

$json = curl_exec($ch); 
var_dump($json); 

Ваш описанный выход возможен только, если API возвращает JSON закодированные JSON строку, так:

"{\"meta\": {\"cache-expiry\": 3600, \"limit\": 25}, \"objects\": [{\"categories\": [\"restaurant\"], \"country\": \"United States\",.......... ' 

(обратите внимание на внешние кавычки , они являются частью строки)

Это очень странно и определенно ошибка в API, но единственный способ обойти его - это его декодировать дважды:

$data = json_decode(json_decode($json)); 

Edit: Забудьте, что Stegrex has figured it out.

+0

спасибо вам тоже) – alexus

Смежные вопросы