【发布时间】:2016-12-01 19:14:09
【问题描述】:
拥有这个 JSON:
在线查看: http://www.jsoneditoronline.org/?id=97bbcb19871e89ff0702f8547589a688
试图解析出来,但有些字段名称是日期,所以我不知道该怎么做。
我想解析并存储在DB中(持久化在MongoDB中):
- 日期
- 参考 (neo_reference_id)
- 姓名
- 速度(公里/小时)
- 是危险的 (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:
Tried as Half Crazed 已回答:
$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;
}
}
}
}
}
【问题讨论】: