使用json_decode访问JSON数组/多维数组

4

我正在从Twitter API中获取搜索结果,使用file_get_contents获取数据,然后传递给json_decode,得到以下数组结构。

{"results":[
     {
     "from_user":"A-user-name",
     "from_user_id":457304735,
     "text":"Ich R U #BoysNoize #SuperRola",

          "entities":{

                 "urls":[{
                        "url":"http:\/\/t.co\/WZnUf68j",
                        "expanded_url":"http:\/\/instagr.am\/p\/Vz4Nnbnjd6\/",
                        }]

     }]
]

对于每条拉取的推文,这个步骤都会重复。现在,我可以使用foreach循环来访问用户名和文本,并将每个结果实例分配给一个变量,然后从变量中提取数据。

foreach($jsonArr['results'] as $item){    

// Takes the Array jsonArr and for every results heading creates an $item

    $user = mysql_real_escape_string($item['from_user']);
    $text = mysql_real_escape_string($item['text']);

这样保存正确的变量是可以的,但我似乎无法获取结果中实体数组内的数据。如果我像输出用户名或文本一样打印实体变量,我会得到:

ArrayArrayArrayArrayArrayArrayArrayArrayArrayArray

所以它保存了每个返回结果的数组,但是我该如何访问它呢?我一直在试用我知道的访问数组数据的方法,但它们似乎都无法做到。希望能有帮助我如何获取这些值或将它们与foreach集成的方法,将不胜感激。


只需使用 print_r($jsonArr); 来查看其确切结构。我在您发布的 entities 中没有看到任何 usernametext - Ranty
可能是如何使用PHP从JSON中提取数据?的重复问题。 - user3942918
3个回答

4
假设您选择将JSON解码为多维数组而不是对象:
foreach ($results as $tweet) {
    $user = $tweet["from-user"];
    $text = $tweet["text"];

    $entities = $tweet["enities"];
    $urls = $entities["urls"];

    foreach ($urls as $url) {
        echo $url["expanded_url"];
    }
}

等等


谢谢,由于你和 @Akam 的帮助,我已经成功地解决了问题,只是在你的解决方案中还有一个级别需要跳转。$urls = $entities["urls"][0]; - Antony Magee

4
Array
(
    [results] => Array
        (
            [0] => stdClass Object
                (
                    [entities] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [urls] => Array
                                        (
                                            [0] => stdClass Object
                                                (
                                                    [expanded_url] => http://instagr.am/p/Vz4Nnbnjd6/
                                                    [url] => http://t.co/WZnUf68j
                                                )

                                        )

                                )

                        )

                    [from_user] => A-user-name
                    [from_user_id] => 457304735
                    [text] => Ich R U #BoysNoize #SuperRola
                )

        )

)

访问URL:

$json_array['results'][0]->entities[0]->urls[0]->url;

有用的代码:

<?php

$json ='{ "results" : [ { "entities" : 
[ { "urls" : [ { "expanded_url" : "http://instagr.am/p/Vz4Nnbnjd6/",
                    "url" : "http://t.co/WZnUf68j"
                  } ] } ],
        "from_user" : "A-user-name",
        "from_user_id" : 457304735,
        "text" : "Ich R U #BoysNoize #SuperRola"
      } ] }';
$json_array = (array)(json_decode($json));
echo '<pre>';
 //print_r($json_array);

 echo $json_array['results'][0]->entities[0]->urls[0]->url;

?>


感谢您提供如何在多维数组中导航的布局,结合您的示例,让我解决了我的问题并学到了一些东西。 - Antony Magee

1

只需执行print_r($jsonArr);,您就可以使用解码后的json数据。


1
虽然这可能是帮助理解数据的好建议,但这并不能解决问题。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接