拥有此JSON:
在线观看: http://www.jsoneditoronline.org/?id=97bbcb19871e89ff0702f8547589a688
尝试解析它,但有些字段名称是日期,所以我不知道该怎么做。
我想解析并存储在DB中(在MongoDB中保留):
尝试这样做,所以我可以获得参考,名称,速度和危险:
$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;
}
}
}
}
}
答案 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元素中的每个子元素,这是您想要的正确吗?如果没有,请更新您的帖子。