使用PHP解析来自API的json响应

时间:2011-12-14 02:19:34

标签: php json api parsing

我正在尝试解析来自API的json响应但是购买了一些我创建的现有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 个答案:

答案 0 :(得分:2)

我不是100%明确你的问题。 Zend_Json :: decode使用了引擎盖下的json_decode,这就是@psion所指的内容。我假设你的例子中有 $ result

$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

答案 1 :(得分:0)

你是什么意思解析?您可以在解码后立即使用JSON回复。您没有$arr['parse']... $arr['webTitle'],其中包含“骑行”。你想在“骑自行车”中解析什么?

此外,将结果分配给$ val然后将$ val分配给$ arr的处理是什么?直接分配给$ arr。

执行print_r($ val)并查看你拥有的内容。这样可以让您更好地了解自己需要做什么。很可能你的事情比他们需要的更复杂。

答案 2 :(得分:0)

PHP中的json函数不需要调用Zend函数。

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