парсинг ответа json от API с PHP - PullRequest
0 голосов
/ 14 декабря 2011

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

"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;
}
}
?>

Этот код просто анализирует содержимое в тегах p, как быЯ изменяю это?

Спасибо

Ответы [ 3 ]

2 голосов
/ 14 декабря 2011

Я не на 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
0 голосов
/ 14 декабря 2011

В PHP есть функция json, которая не требует вызова функций Zend.

http://us2.php.net/manual/en/book.json.php

0 голосов
/ 14 декабря 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...