我有一个由api访问的JSON Feed。 它返回的json feed如下:
[
{
"isoDate":"2017-09-15T00:00:00.0000000",
"events":[
{
"id":"-7317",
"name":"Exhibition SKMU: The collection 2015-2017",
},
{
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo",
}
]
},
{
"isoDate":"2017-09-16T00:00:00.0000000",
"events":[
{
"id":"-7317",
"name":"Exhibition SKMU: The collection 2015-2017",
},
{
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo",
}
]
}
]
我需要在每个事件中列出isoDate而不是单独列出。 例如
[
{
"events":[
{
"isoDate":"2017-09-15T00:00:00.0000000",
"id":"-7317",
"name":"Exhibition SKMU: The collection 2015-2017",
},
{
"isoDate":"2017-09-15T00:00:00.0000000",
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo",
}
]
},
{
"events":[
{
"isoDate":"2017-09-16T00:00:00.0000000",
"id":"-7317",
"name":"Exhibition SKMU: The collection 2015-2017",
},
{
"isoDate":"2017-09-16T00:00:00.0000000",
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo",
}
]
}
]
这可以通过php实现吗?基本上从网址获取该Feed,然后以我首选的格式显示它?
答案 0 :(得分:4)
所以这就是你需要做的,回到你想要的json格式,
$json
是你的json字符串:
$eventList = json_decode($json);
foreach($eventList as $eventEntry){
$isoDate = $eventEntry->isoDate;
foreach($eventEntry->events as $subEventEntry){
$subEventEntry->isoDate = $isoDate;
}
//delete the isoDate from outer
unset($eventEntry->isoDate);
}
echo json_encode($eventList);
所以基本上,你首先将你的json解码为php结构,应用你的更改然后再编码。请注意,我没有将true
作为$json_decode
的第二个参数,而是使用生成的对象。
:您的json不是标准的comform,可能会导致错误。 PHP将正确解码它,因为您的对象以逗号结尾。对象的最后一个元素应该没有逗号。而不是
{
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo",
}
像这样:
{
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo"
}
我知道,当你从API获取它时,这可能是一个问题,但这本身就是另一个问题......
修改强>
获得每个"事件"在一个大阵列中,你必须像你的想象一样存储它们;)。这样想:$subEventEntry
拥有一个"事件" -object。因为您正在迭代这两个级别,所以您会看到每个级别的对象。我的建议是将它们存储在一个新的数组中,并重新构建它周围的结构:
$everything = new stdClass();
$everything->events = array();
然后,在内循环中:
foreach($eventList as $eventEntry){
$isoDate = $eventEntry->isoDate;
foreach($eventEntry->events as $subEventEntry){
$subEventEntry->isoDate = $isoDate;
$everything->events[] = $subEventEntry; // <-- this has to be added
}
//delete the isoDate from outer
unset($eventEntry->isoDate);
}
重新构建结构时,您不再需要旧结构,可以删除unset
。
记住json中的每个[ ]
对代表一个数组,每个{ }
对都是一个对象(stdClass
)。该对象/数组的名称由superobject中的类属性引用->
。
答案 1 :(得分:1)
是的,您可以使用json_decode()
功能,例如:
$yourjson;/* your json */
$events = json_decode($yourjson, true);
foreach($events as $event){
echo $event["isoDate"];
}
答案 2 :(得分:-2)
您可以使用json_decode将json对象解码为php数组,然后使用json_encode修改数组并对其进行编码