Symfony2 Json解析日期

时间:2016-12-01 19:14:09

标签: php json symfony

拥有此JSON:

在线观看: http://www.jsoneditoronline.org/?id=97bbcb19871e89ff0702f8547589a688

尝试解析它,但有些字段名称是日期,所以我不知道该怎么做。

我想解析并存储在DB中(在MongoDB中保留):

  • 日期
  • 参考(neo_reference_id)
  • 名称
  • 速度(km_per_hour)
  • 是危险的(is_potentially_hazardous_asteroid)

尝试这样做,所以我可以获得参考,名称,速度和危险:

  $data = json_decode($response->getBody(), true);

  foreach($data['near_earth_objects'] as $neos)
  {
    foreach($neos as $item)
    {
      $output->write($item['name']);
    }
  }

如何相应地获取日期字段?

在Symfony2中解析JSON数据的最佳做法是什么?

谢谢,

更新1:

尝试半疯狂已回答:

$jd = new JsonDecode();
$neo_obj = $jd->decode($response->getBody(),"json");
foreach($neo_obj->near_earth_objects as $date => $object) {
  // store $date here
  $output->write($date);
  foreach($date as $objects) {
  $links = $objects['links'];
  $neo_ref_id = $objects['neo_reference_id'];
  $output->write($links);
  $output->write($neo_ref_id);
  }
} 

$ date是存在的,但是在第二次看它会发出警告并且不会显示任何内容。

  [Symfony\Component\Debug\Exception\ContextErrorException]  
  Warning: Invalid argument supplied for foreach()  

任何提示?

谢谢,

更新2:

就是这样。

可以改进性能和代码可读性:)?

        $jd = new JsonDecode();
        $neo_obj = $jd->decode($response->getBody(),"json");
        foreach($neo_obj->near_earth_objects as $date => $object) {
          $output->writeln("date:".$date);
          foreach($neo_obj->near_earth_objects as $object1) {
            foreach($object1 as $object2)
            {
              $output->writeln("name:".$object2->name);

              $output->writeln("neo_reference_id:".$object2->neo_reference_id);
              $output->writeln("is_potentially_hazardous_asteroid:".$object2->is_potentially_hazardous_asteroid);
              foreach($object2->close_approach_data as $object3)
              {
                $i=0;
                foreach($object3->relative_velocity as $object4)
                {
                  if($i===1)
                  {
                    $output->writeln("speed:".$object4);
                  }
                  $i=$i+1;
                }
              }


            }
          }
        }

2 个答案:

答案 0 :(得分:1)

您可以使用this进行解码(检查它是否可解码,然后解码)

在我看来,存储这些内容的最佳方法是迭代$obj->near_earth_objects。对于(一个粗略的)例子:

foreach($obj->near_earth_objects as $date => $object) {
  // store $date here
  foreach($date as $objects) {
    $links = $objects['links'];
    $neo_ref_id = $objects['neo_reference_id'];
    // etc..

    // store in db
  }
}

答案 1 :(得分:0)

你可以尝试这个看看是否有效:

foreach($neos as $item){
    for($i=0; $i<sizeof($item); $i++){
        $output->write( $item['$i'] );
    }
}

不确定,但我认为它可能会奏效。这将获取Date元素中的每个子元素,这是您想要的正确吗?如果没有,请更新您的帖子。