在PHP中打印JSON数据时出错


Error while printing JSON data in PHP?

我正在用PHP向Web服务执行HTTP GET请求。我得到的响应是JSON。但是我在打印JSON中的一些值时遇到了一些错误,比如inkey2&键3。我使用的GET请求是正确的。也没有语法错误。URL是正确的,尽管我在问题中指定的URL有点假。:)

作为HTTP GET请求的响应,我得到的JSON

{
   "name":
   {
       "key1": "salala",          
       "key2":
       {              
           "inkey1": "hike",
           "inkey2":
           [
               {
                   "@sunny": "fake",
                   "@leone": "take"
               },
               {
                   "@sunny": "make",
                   "@leone": "bake"
               },
               {
                   "@sunny": "cake",
                   "@leone": "drake"
               },
               {
                   "@sunny": "sake",
                   "@leone": "lake"
               }
          ],
           "inkey3": "bike"
      },
      "key3":
       [
           "batman",
           "superman",
           "spiderman",
           "ironman",
           "hancock"
       ],
       "key4": "nike"
   }
}

//HTTP GET请求

$url='iwonttellyaguys.com';
$jsondata= httpGet($url);
$val_array = json_decode($jsondata, true);
echo'</br>';
echo'</br>';
//To print value salala (successful)
$print_salala=$val_array['name']['key1'];
echo'</br>';
echo'</br>';
//To print value hike & bike (successful)
$print_hike=$val_array['name']['key2']['inkey1'];
$print_bike=$val_array['name']['key2']['inkey3'];
echo'</br>';
echo'</br>';
//To print contents of key4. i.e, to print value nike (successful)
$print_nike=$val_array['name']['key4'];
echo'</br>';
echo'</br>';
//To print contents of inkey2 (Error)
//Incorrect value being printed.
$print_inkey2=$val_array['name']['key2']['inkey2'];
foreach($print_inkey2 as $key=>$value)
       {
          $sunny_leone=$value['@sunny']['@leone'];
          echo $sunny_leone;
       }
This foreach loop returns 3 as output...I am trying to print the contents, not the count.

//To print contents of key3 (Error)
//Incorrect value being printed.
echo'</br>';
echo'</br>';
$hero=$val_array['name']['key3'];
$count_hero=count($hero);
for($i=0;$i<$count_hero;$i++)
{
  echo $hero[$i];
}

// Function Definition of httpGet
function httpGet($url)
{
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    // curl_setopt($ch,CURLOPT_HEADER, false);
    $output=curl_exec($ch);
    curl_close($ch);
    return $output;
}

为什么我不能打印key3&inkey2???

您应该使用:

$print_inkey2=$val_array['name']['key2']['inkey2'];
foreach($print_inkey2 as $key=>$value)
{
    $sunny_leone=$value['@sunny'].$value['@leone'];
    echo $sunny_leone;
}

这部分很好,可以在代码中工作。

$hero=$val_array['name']['key3'];
$count_hero=count($hero);
for($i=0;$i<$count_hero;$i++)
{
  echo $hero[$i];
}

希望能有所帮助。

只需调用一个javaScript函数,该函数就会使用ajax lik 将corrdiantes传递给PHP脚本

<script>
function sendCoords(_lat,_long){
  $.ajax({
url: "yourdomain.com/coords.php",
data:{lat:_lat,long:_long}
});
}
</script>

coords.php脚本应该如下所示:

$lat = $_REQUEST['lat'];
$lang = $_REQUEST['long'];
///Do something

这很好用:

foreach($printinkey2 as $key=>$value)
{
    print $key." @sunny ".$value['@sunny'].PHP_EOL;
    print $key." @leone ". $value['@leone'].PHP_EOL;
}