用php解析json

时间:2011-09-08 23:24:52

标签: php json parsing

我是一个php newb,并且在理解如何解析json api返回时遇到一些问题。这是json的片段:

{
  "results": [
    {
     "list_name": "",
     "display_name": "",
     "updated": "",
     "bestsellers_date": "",
     "published_date": "",
     "isbns": [
      {
       "isbn10": "",
       "isbn13": ""
      },
      {
       "isbn10": "",
       "isbn13": ""
      }
    ],
    "book_details": [
     {
      "title": "Book author",
      "description": "Book description"",
      "contributor": "",
      "author": "Book author",
      "contributor_note": "",
      "price": ,
      "age_group": "",
      "publisher": "",
      "primary_isbn13": "1010101010",
      "primary_isbn10": "1010101010101"
     }
   ],
    "reviews": [
      {
       "book_review_link": "",
       "first_chapter_link": "",
       "sunday_review_link": "",
       "article_chapter_link": ""
     }
   ]
 },

这是我到目前为止的php ...

<?php

$json=file_get_contents('the url for the api return');

// create array
$json_a=json_decode($json,true);

foreach($json_a[results] as $r)
{
echo '

List: '.$r[list_name].'
<br />
Title: '.$r[title].'
<br>
Description: '.$r[description].'
<br />
<br />
';
}

?>

我从api返回并且它为'list_name'提供了正确的值,但'title'和'description'仍未填充;所以,我知道我没有正确访问这些子键(?)。获取这些元素的正确语法是什么?

真的很感谢您所提供的任何指导。提前谢谢。

4 个答案:

答案 0 :(得分:0)

$p来自哪里?

您需要$r->book_details[0]->description之类的内容来获取book_details数组第一项的说明。

答案 1 :(得分:0)

Why is $foo[bar] wrong?

始终在字符串文字数组索引周围使用引号。例如,$ foo ['bar']是正确的,而$ foo [bar]则不是。但为什么?在旧脚本中遇到这种语法是很常见的:

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>

来源:php.net

答案 2 :(得分:0)

标题和描述在子元素“book_details”中,这是一个数组本身

应该是

$r['book_details'][0]['title']

$r['book_details'][0]['description']

只需在PHP中打开错误报告,很明显您尝试访问的索引不存在。

更新:添加了数组索引

答案 3 :(得分:-1)

好吧,{这意味着你有一个对象。即你通过$ var-&gt; name访问它 ans [是一个数组,所以如果你有内容或者你通过$ var ['name']

访问这些值,你可以循环访问它