JSON解码不显示结果

时间:2016-05-13 21:29:32

标签: php json

我有一个非常简单的代码来解码json结果:

        $returnSK = returnSeoKicksLinks($s[0]);
        echo "SeoKicks: " . $returnSK;
        $seoKicks = json_decode($returnSK, true);           
        if (is_array($seoKicks) || is_object($seoKicks))
        {
            foreach ($seoKicks as $key => $val2) 
            {
                 $backlinks2 = $val2['UrlFrom'];
                 echo $backlinks2;
                 // backlink query and insertion
                 //$b = $c->query("INSERT INTO `backlinks` (`backlink_id`,`backlink_url`,`backlink_mother_url`,`backlink_date`,`backlink_from`) VALUES ('','".$backlinks2."','".$s[0]."','seokicks',NOW())");    
            }           
        }

JSON结果:

{
  "Results": [
    {
      "Links": [
        {
          "Anchor": "guaranteed payday loan",
          "nofollow": "1",
          "UrlTo": "http:\/\/www.site.co.uk\/"
        }
      ],
      "Index": 1,
      "IP": "67.139.134.215",
      "UrlFrom": "http:\/\/menomena.com\/?p=240",
      "DomainRank": "7"
    },
    {
      "Links": [
        {
          "nofollow": "0",
          "UrlTo": "http:\/\/www.site.co.uk\/",
          "Anchor": "Cash Till Payday Loan"
        }
      ],
      "DomainRank": "6",
      "IP": "67.222.22.156",
      "Index": 2,
      "UrlFrom": "http:\/\/www.aussi.org\/business\/financial-services\/loans\/"
    },
    {
      "DomainRank": "6",
      "UrlFrom": "http:\/\/www.loanranks.com\/improving-your-chances-of-receiving-payday-loans",
      "Index": 3,
      "IP": "173.254.28.69",
      "Links": [
        {
          "Anchor": "guaranteed payday loans",
          "nofollow": "0",
          "UrlTo": "http:\/\/www.site.co.uk\/"
        }
      ]
    }
  ],
  "Overview": {
    "domainpop": "29",
    "firstresultposition": 1,
    "totalresultsreturned": 3,
    "linkpop": "37",
    "netpop": "27",
    "ippop": "29"
  }
} 

我试图获得" UrlFrom"价值,但它是空白,我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

你需要告诉PHP查看“Results”数组,如下所示:

foreach ($seoKicks['Results'] as $key => $val2)

所以你的代码会变成:

    $seoKicks = json_decode($returnSK, true);           
    if (is_array($seoKicks) || is_object($seoKicks))
    {
        foreach ($seoKicks['Results'] as $key => $val2) 
        {
             $backlinks2 = $val2['UrlFrom'];
             echo $backlinks2;
             // backlink query and insertion
             //$b = $c->query("INSERT INTO `backlinks` (`backlink_id`,`backlink_url`,`backlink_mother_url`,`backlink_date`,`backlink_from`) VALUES ('','".$backlinks2."','".$s[0]."','seokicks',NOW())");    
        }           
    }

关于SQL注入的一些想法

在取消注释查询部分之前,请将您的查询更改为而不是将值连接到SQL中。为避免SQL injection的风险,您应该使用prepared statements代替,将动态值绑定到它。

答案 1 :(得分:0)

如果没有代码的第一部分,则无法执行测试以找出问题所在。但是,使用此代码,我可以打印UrlFrom字段的值(在POST请求中传递JSON):

$jsonPost = file_get_contents('php://input');
$decodedJson = json_decode($jsonPost);
foreach($decodedJson->Results as $key => $value) {
  var_dump($value->UrlFrom);
}