如何在php中从嵌套的json中获取值

时间:2015-09-29 12:42:35

标签: php json

我是JSON的初学者,我正在尝试从json字符串中获取值。例如,我想阅读第一个“t”:1443502800 并将其分配给变量 $ beginTime 和第二个“t “:1443790800 分配给变量 $ endTime

{
  "op":"&",
  "c":[
       {
         "type":"date",
         "d":">=",
         "t":1443502800
       },
       {
         "type":"date",
         "d":"<",
         "t":1443790800
       }
     ],
  "showc":[true,true]
}

我真的很感激任何帮助:)

修改代码

foreach($rs2 as $record2)
    { 
      if( $record2->availability == '{"op":"&","c":[],"showc":[]}'){
        //skip, because the restriction date was not set for this attendance
      }
      else{
        //get the restriction date by making use of json                  
         $json_data = json_decode($record2->availability, true);
         echo $json_data['c'];
      }
    } 

2 个答案:

答案 0 :(得分:1)

问题是你无法回应数组。您正在尝试回显$json_data['c'],这是一个数组。要么返回它,要么回应你需要的东西。例如,使用echo $json_data['c'][0]['t']

来回显开始时间

原始回答

你应该在第二个变量中使用json_decode而不使用true。然后你有对象(以大括号{开头)和数组(以方括号[开头)。然后,您可以获得我们的开始和结束时间

<?php
$string = '{
  "op":"&",
  "c":[
       {
         "type":"date",
         "d":">=",
         "t":1443502800
       },
       {
         "type":"date",
         "d":"<",
         "t":1443790800
       }
     ],
  "showc":[true,true]
}';
$json = json_decode($string);
echo "Start time: ".$json->c[0]->t;
echo "End time: ".$json->c[1]->t;

这是一个工作的eval.in - https://eval.in/441599

答案 1 :(得分:1)

你快到了。完整的电话应该是

$beginTime = $json_data['c'][0]['t'];

因为$json_data['c'][0]是数组:

array (
    "type" => "date",
    "d" => ">=",
    "t" => 1443502800
),

$endtime可以通过类似的方式获得:

$endTime = $json_data['c'][1]['t'];