2011-12-14 7 views
0

Я пытаюсь разобрать ответ json от API, но покупаю изменение существующего кода PHP, который я создал, но у меня возникают трудности. Это ответ JSONразбор json-ответа от API с PHP

"response":{ 
    "status":"ok", 
    "userTier":"free", 
    "total":10, 
    "startIndex":1, 
    "pageSize":10, 
    "currentPage":1, 
    "pages":1, 
    "results":[{ 
    "id":"lifeandstyle/series/cycling", 
    "type":"series", 
    "webTitle":"Cycling", 
    "webUrl":"http://www.guardian.co.uk/lifeandstyle/series/cycling", 
    "apiUrl":"http://content.guardianapis.com/lifeandstyle/series/cycling", 
    "sectionId":"lifeandstyle", 
    "sectionName":"Life and style" 
    } 

Попытка разобрать всю информацию в «webTitle» и «webUrl» секции

<?php 
require_once 'Zend/Json.php'; 
$val = Zend_Json::decode($result); 
$arr = $val; 
if(preg_match_all("~<p>([\s\S]*?)</p>~i", $arr['parse']['text']['*'], $matches)){ 
if(is_array($matches[1])) foreach($matches[1] as $paragraph){ 
echo $paragraph; 
} 
} 
?> 

Этот код просто разбирает содержимое в р тегов, как бы я изменить его?

Thanks

ответ

0

Что вы понимаете под разборкой? Ответ JSON готов к использованию, как только вы его декодируете. У вас нет $arr['parse']... у вас есть $arr['webTitle'], который содержит «Велоспорт». Что вы хотите анализировать внутри «Велоспорт»?

Кроме того, какова сделка с присвоением результата $ val и присвоением $ val переменной $ arr? Назначьте прямо в $ arr.

Сделайте print_r ($ val) и посмотрите, что у вас есть. Это даст вам лучшее представление о том, что вам нужно сделать. Скорее всего, вы делаете вещи более сложными, чем они должны быть.

2

Я не 100% ясно, на ваш вопрос. Zend_Json :: decode использует json_decode под капотом, на что ссылался @psion. Я предполагаю, что $ привести в вашем примере

$val = Zend_Json::decode($result); 

держит JSON вы вставили заранее.

Он смотрит на меня, как и вы вывесили JSON является недействительным или, по крайней мере неполным (потому что есть недостающий ] и недостающий }). Я не уверен, что это связано с разбором парсеров p тегов, но в любом случае вот пример, который анализирует json и извлекает интересующие вас компоненты. Он снимает ведущий «ответ»: бит от json перед декодированием.

<?php 
$sJson = '"response":{ 
    "status":"ok", 
    "userTier":"free", 
    "total":10, 
    "startIndex":1, 
    "pageSize":10, 
    "currentPage":1, 
    "pages":1, 
    "results":[{ 
    "id":"lifeandstyle/series/cycling", 
    "type":"series", 
    "webTitle":"Cycling", 
    "webUrl":"http://www.guardian.co.uk/lifeandstyle/series/cycling", 
    "apiUrl":"http://content.guardianapis.com/lifeandstyle/series/cycling", 
    "sectionId":"lifeandstyle", 
    "sectionName":"Life and style" 
    }]}'; 
$sJson = substr($sJson, strpos($sJson, ':') + 1); 

// feel free to replace json_decode w/ Zend_Json::decode 
$aNative = json_decode($sJson); 

$sWebTitle = $aNative->results[0]->webTitle; 
$sWebUrl = $aNative->results[0]->webUrl; 

echo 'Web Title: ' . $sWebTitle . PHP_EOL; 
echo 'Web URL : ' . $sWebUrl . PHP_EOL; 

Вот выход из сценария

Web Title: Cycling 
Web URL : http://www.guardian.co.uk/lifeandstyle/series/cycling 
Смежные вопросы