如何从json数据php中的数组中获取数据

时间:2014-06-22 15:56:18

标签: php arrays json laravel

我有以下json数据数组。当我尝试使用for循环时,php给了我错误"类stdClass的对象无法转换为字符串"。我想访问authns数组中的名称服务器和soa数组。我该怎么做呢?

stdClass Object ( 
    [error] => 
    [domain] => whoisdoma.net 
    [ip_address] => 108.162.199.120   
    [authns] => stdClass Object ( 
        [nameserver] => uma.ns.cloudflare.com 
        [ip] => 173.245.58.146 
        [location] => San Francisco 
    ) 
    [soa] => stdClass Object ( 
        [nameserver] => tom.ns.cloudflare.com 
        [email] => dns.cloudflare.com 
        [serial] => 2015505396 
        [refresh] => 10000 
        [retry] => 2400 
        [expiry] => 604800 
        [minimum] => 3600 
    )
) 

这是我用来获取数据的代码:

 <?php
 $domain = $_GET['domain'];
//set the url
$url = "http://api.site.ga/v1/dns/lookup?domain=".$domain;

//start a curl session
$ch = curl_init();
$timeout = 5;

//set curl options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

//get the data
$data = curl_exec($ch);

//decode the data
$jsonData = json_decode($data);

//close the curl session
curl_close($ch);

?>

这是我使用

的每个循环
<?php 

foreach($jsonData->authns as $authns)
{
    echo $authns->nameserver;
}

?>

2 个答案:

答案 0 :(得分:2)

您需要使用关联数组解码json对象。

这是一个例子:

$data = json_decode(file_get_contents('http://api.domain.com/call'), true);

$ data现在是一个关联数组。

答案 1 :(得分:2)

当它是一个对象时,你正在遍历authns。因此,您想要的nameserver在第一次迭代中实际上是$authns

只需像$jsonData->authns->nameserver

那样访问它

亲自试试

foreach($jsonData->authns as $authns)
{
    echo $authns;
}